private
은 Unit Test를 어떻게 할까?queue
에 private
을 설정해주었더니 test모듈에서 queue
에 접근이 불가해서 테스트를 할 수 없는 이슈가 발생했다.
다른 캠퍼들이 나누어주신 해결방법은 아래와 같은 것들이 있었다. 캠퍼님들 감사해요🧡
queue
를 get하는 연산프로퍼티를 정의한다. (test만을 위한 코드를 프로덕션 코드에 적어준다는게 좀 찜찜하다)private (set)
을 활용하는 방법나는 첫번째 방법으로 queue
를 연산프로퍼티로 접근하는 방법으로 테스트케이스를 수정했다.
이에 대해선 리뷰어에게 조언을 더 구해보아야겠다.
추가적으로 읽어 볼 글
SHOULD PRIVATE METHODS BE TESTED?
추가적으로
test case작성할 때부터 private한 멤버는 private을 붙이자!
메서드에 에러를 throw하는 구문을 추가하니 기존 test case에서 메서드 호출시 에러를 핸들링(do-try-catch)을 구현해주어야했다.
당장은 catch문안에서 쓸 함수를 구현할 단계가 아닌데, TDD에선 이럴 땐 어떻게 해야할지에 대해 고민이 되었다.
그래서 처음으로 시도한 방법은
func dummyErronHandler () {
return
}
dummy라고 지어준 이유는
- 인스턴스화 된 객체가 필요하지만 기능은 필요하지 않은 경우에 사용한다.
- Dummy 객체의 메서드가 호출되었을 때 정상 동작은 보장하지 않는다.
- 객체는 전달되지만 사용되지 않는 객체이다.
참고 블로그
https://tecoble.techcourse.co.kr/post/2020-09-19-what-is-test-double/
이런경우에 dummy를 사용하는 것이 일반적인지는 잘 모르겠다.
그런데 굳이 dummy함수를 만들어 주지 않아도 메서드의 반환 값을 확인할 수 있는 방법이 있었다.
func test_divide호출시_1hs를_2hs로_나눈몫을_반환한다() {
let lhs = 100.00
let rhs = 2.0
XCTAssertEqual(try Operator.divide.divide(lhs: lhs, rhs: rhs), lhs/rhs)
}
나는 이 방법으로 test를 했다.
그리고 추가적으로 에러를 던지는 상황에서 정상적으로 에러가 던져졌는지 확인하는 방법은 던져진 오류를 XCTAssertThrowsError
로 검증할 수 잇다.
func test_rhs가_0일때_divide호출시_계산오류를_반환한다() {
let lhs = 12345.6789
let rhs = 0.0
XCTAssertThrowsError(try Operator.divide.divide(lhs: lhs, rhs: rhs)) { error in XCTAssertEqual(error as? CalculatorError, .incomputableDivdie) }
}
참고한 블로그😊
[Git] 이미 Push한 Commit 메세지 변경하기
스위프트의 Arithmetic Operators (산술 연산자)를 사용한 메서드 테스트 코드를 작성하다가 신기한? 오류를 만나게 되었다.
아래 코드와 같이 sum 과 덧셈한 값(20.99)을 직접 넣어주어 비교를 해주니, 둘이 다른 값이라고 한다...😮
sum 이 20.990000000000002를 반환...?
띠용... 왜 이런 계산이 나오는 걸까요??
<test 함수 코드>
func add(lhs: Double, rhs: Double) -> Double {
lhs + rhs
}
그 이유는 컴퓨터가 실수를 표하는 방법에서 기인한거라고 한다.
참고한 블로그
[CS] 부동 소수점 오차