Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Refactoring
- UICollectionView
- SWIFT
- clean architecture
- swift documentation
- UITextView
- rxswift
- tableView
- ribs
- collectionview
- HIG
- 스위프트
- uiscrollview
- Observable
- 리펙터링
- uitableview
- 리팩토링
- Clean Code
- swiftUI
- Protocol
- ios
- Human interface guide
- combine
- MVVM
- map
- 리펙토링
- RxCocoa
- Xcode
- 애니메이션
- 클린 코드
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] Nimble, Quick 프레임워크 (Unit test) 본문
테스트 대상 코드
class Converter {
func starPrint(number: Int) -> String {
return String(repeating: "*", count: number)
}
}
Nimble 프레임워크
- Nimble: "재빠른"
- 다양한 assertion 제공
- 가독성 좋은 실패 메세지 제공: (XCTAssert에서는 실패 메세지를 따로 정의해주어야 확인이 쉬움)
- XCTAssertTrue(result, "1") // 틀린경우 "XCTAssertTrue failed"
- XCTAssertTrue(result, "1", "입력값에 대한 값이 틀림") // 틀린경우 아래와 같은 메세지
func testExample() throws {
let result = converter?.starPrint(number: 1)
XCTAssertEqual(result, "1", "1에대한 테스트 틀림")
}
Nimble 사용
- 의존성
pod 'Nimble'
- XCTAssert가 아닌 expect().to()형태로 사용
func testExample() throws {
let result = converter?.starPrint(number: 1)
// XCTAssertEqual(result, "1", "1에대한 테스트 틀림")
expect(result).to(contain("1"))
}
- description 사용가능
func testExample() throws {
expect(1 + 1).to(equal(3), description: "failed - 덧셈 기능을 테스트")
}
- async한 테스트 - toEventually, toEventuallyNot
- time out에 관한 테스트
// Swift
// Waits three seconds for ocean to contain "starfish":
expect(ocean).toEventually(contain("starfish"), timeout: .seconds(3))
// Evaluate someValue every 0.2 seconds repeatedly until it equals 100, or fails if it timeouts after 5.5 seconds.
expect(someValue).toEventually(equal(100), timeout: .milliseconds(5500), pollInterval: .milliseconds(200))
- Type, class 형에관한 테스트
- true/false, nil 여부 테스트
Quick 프레임워크
- 개념: BDD (Behavior-Driven Development)를 위한 프레임워크
- Quick은 desciription과 함께 클로저로 블럭단위 묶음으로 코딩하게끔 하여 가독성 상승을 위해 사용
- given(시나리오 정의)-when(시나리오 조건)-then(시나리오를 완료했을 때 보장되는 결과 명시)
Quick 프레임워크 사용 방법
- 클로저 블록 단위 Given, When, Then 구성
- Given = describe
- When = context
- Then = it
- 초기화 블록: beforeEach
import Quick
- class에는 QuickSpec 상속
class NimbleQuickTests: QuickSpec {
- spec()이라는 함수 override
class NimbleQuickTests: QuickSpec {
override func spec() {
}
}
- Given = describe
describe("뷰가 로드되면") { // Given
var myModule: Converter!
beforeEach {
myModule = Converter()
}
- When - context
context("텍스트필드에 입력되면, convert된다") { // When
beforeEach {
myModule.starPrint(number: 5)
}
- Then - it
it("값이 잘 변환되었는지 테스트") { // Then
expect(myModule.result).to(equal("****"))
}
- 전체코드
class NimbleQuickTests: QuickSpec {
override func spec() {
describe("뷰가 로드되면") { // Given
var myModule: Converter!
beforeEach {
myModule = Converter()
}
context("텍스트필드에 입력되면, convert된다") { // When
beforeEach {
myModule.starPrint(number: 5)
}
it("값이 잘 변환되었는지 테스트") { // Then
expect(myModule.result).to(equal("****"))
}
}
}
}
}
* 참고
- Nimble: github.com/Quick/Nimble
- Quick: github.com/Quick/Quick
'Unit Test와 UI Test' 카테고리의 다른 글
[UnitTest] RxSwift, MVVM 구조의 테스트 코드 작성 하기 (RxTest, RxNimble) (0) | 2021.02.12 |
---|---|
[iOS - swift] BDD (Behavior Driven Development) (given, when ,then) (0) | 2021.02.12 |
[iOS - swift] TDD (Test Driven Development) (2) | 2021.02.12 |
[iOS - swift] Unit test 개념, @testable (0) | 2021.02.11 |
Comments