TIL - 2024.04.30 화요일

· 성취/개선/학습한 내용 🏆

 오늘은 Unit Test에 대해 공부를 했다. Unit Test는 로직들을 테스트하는 것이기 때문에 UI Test보다 테스트 속도가 매우 빠르다. 그리고 해당 코드를 가져와서 테스트를 하는 데 사용해야 하기 때문에 @testable을 사용해야 한다. @testable을 사용하는 이유는 테스트를 할 비즈니스 로직과 Unit Test 파일은 서로 다른 모듈이기 때문이다. 그렇기에 비즈니스 로직 코드가 있는 모듈을 사용할 수 있게 import 해줘야 한다. 이때 비즈니스 로직 코드가 internal이라면 메서드나 class를 가져올 수 없다. 하지만 테스트를 위해서 접근제한자를 다 바꿔주는 것은 말이 안 된다. 이런 경우를 위해 @testable을 사용하면 internal이라도 접근하여 테스트를 가능하게 해 준다. (private이나 fileprivate은 안된다..?!?)

 또 Unit Test의 First 원칙에 의해서 setUp, tearDown 부분도 고려해줘야 하는데, setUp으로 테스트 할 부분을 설정해 주고 tearDown으로 항상 nil을 만들어 다음 테스트에 영향이 가지 않게 초기 상태로 복원해야 한다. 이후 test로 시작하는 메서드로 테스트를 할 수 있는데, XCTAssert를 이용해 false, true, nil 값을 확인하여 테스트가 의도적으로 되었는지 확인할 수 있다.

 마지막으로 Unit Test는 동기 테스트에 최적화 되어 있어서 비동기 작업을 하려면 3가지를 적용해야 한다. 먼저 expectation으로 실패 시 나올 로그를 써주고, wait으로 비동기 작업을 얼마나 기다릴지 설정해준 다음 fulfill로 동작이 수행되면 완료되었다고 알려줘야 한다. 

  • Unit Test
    • @testable
    • sut (System Under Test) : 시스템이 테스트를 하려는 대상
    • setUp
    • tearDown
    • XCTAssertTrue
    • XCTAssertFalse
    • XCTAssertNil
    • 비동기 작업 Test
      • expectation
      • wait
      • fulfill

· 어려웠던 내용 😵😵‍💫

  • 공부했던 내용이 어렵다기 보다는 어떻게 효율적으로 테스트 코드를 작성할 수 있을지 모르겠다. 구현하는 것을 배운 만큼 테스트 코드에도 시간을 들여야 할 거 같은데.. 사실 좀 막막하긴 하다.

· 궁금한 내용과 부족한 내용 ⁉️🤔

  • @testable로 private이나 fileprivate은 접근할 수 없는데.. 어떻게 해야 하는 것일까?

 

 

'# TIL (Today I Learned)' 카테고리의 다른 글

TIL - 2024.05.08 수요일  (0) 2024.05.08
TIL - 2024.05.03 금요일  (0) 2024.05.03
TIL - 2024.04.29 월요일  (0) 2024.04.29
TIL - 2024.04.26 금요일  (0) 2024.04.26
TIL - 2024.04.25 목요일  (0) 2024.04.25