단위 테스트 실습

  • New File → Unit Test bundle 만들기
  • 생성된 TDD_Test 선택

앱에서 테스트하는 방법

  • Target membership 파일 별로 체크박스 일일히 해주기

Why? Target Membership에 체크: 해당 모듈의 소스파일이 된다는 의미

  • 혹은 @Testable 해주기

When you add the @testable attribute to an import statement for a module compiled with testing enabled, you activate the elevated access for that module in that scope. Classes and class members marked as internal or public behave as if they were marked open. Other entities marked as internal act as if they were declared public.

참고 자료: Writing Tests with Swift

커맨드에서 테스트하는 방법

  • Target membership 파일 별로 체크박스 일일히 해주기
  • 혹은 필요한 파일들 다 삽입 (프로젝트 설정 → build phases에서 직접 소스 파일로 넣어주기)
class CalculatorTests: XCTestCase {
  let calculateBinaryNumber = CalculateBinaryNumber()
  let calculateDecimalNumber = CalculateDecimalNumber()
  
  override func setUpWithError() throws {
    try super.setUpWithError()
  }
  
  override func tearDownWithError() throws {
    try super.tearDownWithError()
  }
  
  func test_decimal_plus() {
    XCTAssertEqual(calculateDecimalNumber.plus(111, 222), 333)
  }
  
}

이렇게 하면 안됨.

setUpWithError가 viewdidload하면 제일 먼저 실행하는 함수인데

그전에 calculateBinaryNumber 값을 넣어줘봤자 소용 없음.

아래와 같이 10진법 더하기 함수를 테스트해봤다.

문제점/고민한점 → 해결방안

유닛 테스트를 진행해보려 했으나 에러 메시지가 나타남 😢

모둠원들과 비교해보니 나의 Xcode는 구버전이었다 😅 (업데이트 하지 않은 상태, macOS만 신버전 Big Sur 11.1)
앱스토어로 가보니 update가 아닌 download가 떠서?? 이상했지만 (이게 기존 맥북에서 M1 맥북에어로 migration해서 그런건지?)

아무튼 최신버전 XCode로 다운 받은 후 해결됨 👍
(최신 버전 다운 후에도 똑같이 위의 에러 메시지가 떴지만
무시하고 cmd + u를 누르니 실행이 됐다)

  • TDD 이슈: Undefined symbol

→ 이게 해결이 안돼서 도움을 요청했고
덕분에 Target membership에 대해 알게됨 👍 😊

참고 자료: Linker error when accessing application module in UI tests in Xcode 7.1

profile
iOS Developer

0개의 댓글