Sign In
한결
Status
Empty
Assignee
Empty
Swift에서의 Unit Test 의 기본
XCode 프로젝트에서 UnitTesting 타겟을 생성하면 XCTestCase를 상속받는 테스팅 클래스가 만들어진다.
Unit Test를 하기 위한 ViewController, ViewModel을 서로 다른 위치의 Test Target에 불러오기 위해서는 @testable이라고 하는 어트리뷰트를 통해 프로젝트를 import 해줄 수 있다.
@testable import TargetProject
물론, targetMembership을 활용해서 프로젝트의 클래스나 어떤 파일을 Test Target에 넣어줄 수 있다.
또한, public 접근자를 통해서 타겟간의 참조가 가능한 제어를 만들 수는 있겠다.
테스트 케이스 클래스에는 4개의 메서드가 기본적으로 셋업된다.
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 보다 빠르게 진행된다.
👍