열거형을 테스트하는 방법

zoe·2021년 11월 13일
0

리팩토링

목록 보기
1/1

이 상태에서 어떻게 테스트를 하면 좋을까?

   func test_add케이스일때_15_5를입력하면_20이나오는지() {
        if sut == .add {
            let result = sut.calculate(lhs: 15, rhs: 5)
            XCTAssertEqual(result, 7)
        }
    }
    
    func test_subtract케이스일때_15_5를입력하면_10이나오는지() {
        if sut == .subtract {
            let result = sut.calculate(lhs: 15, rhs: 5)
            XCTAssertEqual(result, 103)
        }
    }
    
    func test_divide케이스일때_15_5를입력하면_3이나오는지() {
        if sut == .divide {
            let result = sut.calculate(lhs: 15, rhs: 5)
            XCTAssertEqual(result, 33)
        }
    }
    
    func test_multiply케이스일때_15_5를입력하면_75가나오는지() {
        if sut == .multiply {
            let result = sut.calculate(lhs: 15, rhs: 5)
            XCTAssertEqual(result, 7)
        }
    }

처음에는 setUpWithError에서 Operator.allCases에 접근하는방식으로 해결해보려고 했다.
하지만 모든 테스트들은 순서에 상관없이 테스트가 가능해야 하므로 적절하지 못하다고 생각했다.

그래서 생각해보니 func test() { }안에서 sut = .add이런식으로

class OperatorTests: XCTestCase {
  var sut: Operator!

  override func setUpWithError() throws {
      try super.setUpWithError()
      sut = Operator(rawValue: "+")
  }

  override func tearDownWithError() throws {
      try super.tearDownWithError()
      sut = nil
  }

  func test_add케이스일때_15_5를입력하면_20이나오는지() {
      sut = .add
      let result = sut.calculate(lhs: 15, rhs: 5)
      XCTAssertEqual(result, 20)
      
  }
  
  func test_subtract케이스일때_15_5를입력하면_10이나오는지() {
      sut = .subtract
      let result = sut.calculate(lhs: 15, rhs: 5)
      XCTAssertEqual(result, 10)
  }
  
  func test_divide케이스일때_15_5를입력하면_3이나오는지() {
      sut = .divide
      let result = sut.calculate(lhs: 15, rhs: 5)
      XCTAssertEqual(result, 3)
  }
  
  func test_multiply케이스일때_15_5를입력하면_75가나오는지() {
      sut = .multiply
      let result = sut.calculate(lhs: 15, rhs: 5)
      XCTAssertEqual(result, 75)
  }
}

이렇게 해결~!

profile
개발하면서 마주친 문제들을 정리하는 공간입니다.

0개의 댓글