# Untitled

Swift에서의 Unit Test 의 기본

- XCode 프로젝트에서 UnitTesting 타겟을 생성하면 XCTestCase를 상속받는 테스팅 클래스가 만들어진다.

- Unit Test를 하기 위한 ViewController, ViewModel을 서로 다른 위치의 Test Target에 불러오기 위해서는 **@testable이라고 하는 어트리뷰트를 통해 프로젝트를 import 해줄 수 있다.**

```javascript
@testable import TargetProject
```

    - 물론, targetMembership을 활용해서 프로젝트의 클래스나 어떤 파일을 Test Target에 넣어줄 수 있다.

    - 또한, public 접근자를 통해서 타겟간의 참조가 가능한 제어를 만들 수는 있겠다.

- 테스트 케이스 클래스에는 4개의 메서드가 기본적으로 셋업된다.

```javascript
final class SomeTestCase: XCTestCase {
   
   // system under test: 테스트 타겟
   var sut: ViewController!
   
   override func setUpWithError() throws {
      sut = .init()
   }
   
   override func tearDownWithError() throws {
      sut = nil
   }

   func testExample() throws {
      
   }
   
   func testPerformanceExample() throws {
      self.measure {
      }
   }
}
```

    - override되는 두 개의 메서드는 각각의 Test Unit이 테스트를 진행할 때마다 앞, 뒤로 동작하면서 필요한 초기화, 정리를 담당한다.

        - testExample 메서드가 테스트 로직을 진행한다고 하면,

1. setUpWithError 구문이 먼저 돌아, 테스트에 필요한 값들을 초기화 해줄 수 있고

2. testExample의 테스트 로직이 돌고

3. tearDownWithError 의 정리 구문이 돌아간다.

        - Node신에서 활용하는 Jest 라이브러리의 beforeEach, afterEach 메서드와 비슷하다. 

- test 로직을 작성하는 메서드는 기본적으로 `test` 라는 prefix가 붙는다.

    - 메서드 하나하나를 Test Unit으로 보고 빠르게 검증하는 것이 Unit Test라고 볼 수 있다.

    - 시뮬을 띄우고 직접 필요한 UI 작업을 하는 UI Test 보다 빠르게 진행된다.

For the site tree, see the [root Markdown](https://slashpage.com/hankyeol.md).
