12.11.21 릴리 TIL : TDD는 처음이라

Lily·2021년 11월 14일
0

Today I Learned

목록 보기
22/30
post-custom-banner

🤔 오늘 고민한 내용


TDD는 처음이라

1. private은 Unit Test를 어떻게 할까?

queueprivate을 설정해주었더니 test모듈에서 queue에 접근이 불가해서 테스트를 할 수 없는 이슈가 발생했다.

다른 캠퍼들이 나누어주신 해결방법은 아래와 같은 것들이 있었다. 캠퍼님들 감사해요🧡

  • test모듈과 프로덕션 간에 인터페이스 생성. queue를 get하는 연산프로퍼티를 정의한다. (test만을 위한 코드를 프로덕션 코드에 적어준다는게 좀 찜찜하다)
  • private (set)을 활용하는 방법
  • 다른 있는 메서드들을 활용해서 test case를 작성해 간접적으로 테스트하는 방법
  • subscript을 활용하는 방법

나는 첫번째 방법으로 queue를 연산프로퍼티로 접근하는 방법으로 테스트케이스를 수정했다.
이에 대해선 리뷰어에게 조언을 더 구해보아야겠다.

추가적으로 읽어 볼 글
SHOULD PRIVATE METHODS BE TESTED?

추가적으로
test case작성할 때부터 private한 멤버는 private을 붙이자!

2. Error Handling과 TDD의 속도 차이는 어떻게 해결할까?

메서드에 에러를 throw하는 구문을 추가하니 기존 test case에서 메서드 호출시 에러를 핸들링(do-try-catch)을 구현해주어야했다.

당장은 catch문안에서 쓸 함수를 구현할 단계가 아닌데, TDD에선 이럴 땐 어떻게 해야할지에 대해 고민이 되었다.

그래서 처음으로 시도한 방법은

#1. 깡통함수를 만들어 catch문에서 에러핸들링을 한다.

func dummyErronHandler () {
     return
}

dummy라고 지어준 이유는

  • 인스턴스화 된 객체가 필요하지만 기능은 필요하지 않은 경우에 사용한다.
  • Dummy 객체의 메서드가 호출되었을 때 정상 동작은 보장하지 않는다.
  • 객체는 전달되지만 사용되지 않는 객체이다.

참고 블로그
https://tecoble.techcourse.co.kr/post/2020-09-19-what-is-test-double/

이런경우에 dummy를 사용하는 것이 일반적인지는 잘 모르겠다.

그런데 굳이 dummy함수를 만들어 주지 않아도 메서드의 반환 값을 확인할 수 있는 방법이 있었다.

#2. XCT메서드에서 catch없이 호출한다

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를 했다.

#3. XCTAssertThrowsError의 클로저에서 던진 오류를 확인한다.

그리고 추가적으로 에러를 던지는 상황에서 정상적으로 에러가 던져졌는지 확인하는 방법은 던져진 오류를 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

remote에 push한 커밋 메시지 수정하는 방법

참고한 블로그😊
[Git] 이미 Push한 Commit 메세지 변경하기


컴퓨터의 소수 표현법 : 부동소수점

스위프트의 Arithmetic Operators (산술 연산자)를 사용한 메서드 테스트 코드를 작성하다가 신기한? 오류를 만나게 되었다.

아래 코드와 같이 sum 과 덧셈한 값(20.99)을 직접 넣어주어 비교를 해주니, 둘이 다른 값이라고 한다...😮
sum 이 20.990000000000002를 반환...?
띠용... 왜 이런 계산이 나오는 걸까요??

<test 함수 코드>

 func add(lhs: Double, rhs: Double) -> Double {
        lhs + rhs
  }

그 이유는 컴퓨터가 실수를 표하는 방법에서 기인한거라고 한다.

참고한 블로그
[CS] 부동 소수점 오차

profile
i🍎S 개발을 합니다
post-custom-banner

0개의 댓글