TIL(Today I Learned)

12월 14일(월)

학습내용

  • Kahoot으로 지난주에 배운 것을 복습하였다.
    • AView.Trailing = 1 * BView.Leading + 10 에서 Trailing, Leading은 property가 아니라 attribute이다. (Constraint는 Attribute, Relationship, Multiplier, Constant로 이루어진다.)
    • 퀵정렬은 평균적으로 가장 빠른 정렬이었기 때문에 퀵정렬이라는 이름이 붙었다.
    • Xcode의 테스트 수행을 위해 필요한 프레임워크는 XCTest이다.
    • Xcode에서 수행할 수 있는 테스트는 Performance Test, UITest, UnitTest 이다.
  • 붱이에게 TDD, Unit Test을 배웠다.
    • TDD는 RED → GREEN → REFACTOR → … 로 진행
      • RED: 테스트를 실패하는 코드 작성
      • GREEN: 일단 테스트는 통과하도록 코드 수정(불완전한 코드)
      • REFACTOR: 테스트를 통과하며, 더 나은 코드가 되도록 수정.
    • 단위 테스트를 통해 TDD를 진행한다.
    • TDD는 큰 단위의 문제를 작은 단위로 나눈다.
    • TDD는 지속적인 피드백을 통해 목표를 개선한다.
    • 테스트는 훌륭한 스펙 정의 문서가 된다. (테스트를 통해 함수가 어떤 입력이 필요하고, 어떻게 작동하고, 무엇을 출력하는지 파악할 수 있다.)
    • 테스트를 하지 않으면 리팩토링이 어렵고 두려워진다.
    • 테스트의 범위는 스펙상에 나와있는 값 테스트와 경계값 테스트는 기본적으로 포함되어야 한다.

문제점/고민한점

  • setUp VS setUpWithError 의 차이?
  • Mock, Fake, Spy, 등의 차이는?
  • Xcode에서 Code Coverage를 확인하는 기능은 어떻게 사용할까?

해결방법

  • setUp VS setUpWithError 의 차이?
    • setUp시 발생하는 에러를 다룰 것이냐, 다루지 않을 것이냐의 차이가 있다. setUpWithError를 사용하면 테스트 초기 설정에서 에러가 발생했는데 테스트를 진행하여 실패처리 하지 않고, 테스트를 스킵할 수 있다는 장점이 있다. XCTSkip 함수를 테스트 함수 내부에 구현함으로써 초기설정의 실패여부에 따라 테스트를 스킵할 수 있다.
  • Mock, Fake, Spy, 등의 차이는?
    • Mock, Spy, Fake, Stub, Dummy을 Test Double이라고 한다.
    • Mock: 테스트할 모듈의 출력을 확인하려는 목적. 기대하는 출력이 있다.
    • Spy: 테스트할 모듈의 출력을 확인하려는 목적은 Mock이랑 비슷하지만, 출력을 기대하지 않고 기록한다.
    • Fake: 복잡한 역할을 대신하는 간단한 구현체.
    • Stub: 정형화된 답을 반환하는 모듈이며, 이 답을 이용하여 테스트를 진행한다.
    • Dummy: 테스트할 함수에 필요한 입력 파리미터를 대신할 데이터.
  • Xcode에서 Code Coverage를 확인하는 기능은 어떻게 사용할까?
    • Edit Scheme → Test → Options 에서 Code Coverage를 모을것인지 체크하고 타겟을 설정하면 된다.
    • 그 다음 테스트를 실행하면 Report Navigator에 Code Coverage가 기록된다.
    • Code Coverage는 테스트가 진행될 때 코드가 얼마나 실행되었는지를 나타내는 지표이다. (테스트가 얼마나 완료되었는지)

참고