티스토리 뷰
Unit test 라이브러리로 많이 쓰이는 Quick과 Nimble..!
왜 유명한 것인지 Nimble부터 살펴보자 ☺️
[1] XCTAssert 와는 달리 매번 사용자 임의 실패 메시지를 지정할 필요가 없다
XCTAssert에서 실패 메세지를 작성해주지 않으면,
XCTAssertTrue(contains(sillyMonkeys, kiki))
테스트가 실패했을 때 달랑 "XCTAssertTrue failed" 이라는 실패메세지를 받게 된다
그래서 보통 이렇게 실패 메시지를 함께 작성한다
XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'")
테스트가 실패했을 때 "Expected sillyMonkeys to contain 'Kiki'" 이라는 실패메세지를 보고 실패 원인을 빨리 알아내기 위해서이다
Nimble을 사용하면 이렇게 수동으로 실패 메세지를 작성해주지 않아도 된다..! (작성해보면 이것도 꽤 시간이 많이 드는 일임을, 실수할 수 도 있는 일임을 알게 된다) 그리고 Nimble은 더 읽기 쉬운 실패 메세지를 제공해준다 감동적..🥺
Nimble을 설치하고 Nimble의 XCTAssert인 expect를 써보자
expect(sillyMonkeys).to(contain(kiki))
테스트가 실패했을 때,
"expected to contain <Monkey(name: Kiki, sillines: ExtremelySilly)>, got <[Monkey(name: Jane, silliness: VerySilly)]>"
이라는 메세지를 받게 된다
물론 원한다면, 이렇게 custom 에러 메세지도 쓸 수 있다..!
테스트에 실패하면 Nimble이 만들어준 에러메세지와 내가 정의한 커스텀 에러 메세지가 같이 나온다..!
[2] 다양한 assertion을 제공한다
async한 테스트는 toEventually 또는 toEventuallyNot을 사용한다
timeout이라는 파라미터를 설정해줌으로써 테스트하고자 하는 값이 update되는 것을 기다려줄 수 도 있다
pollInterval이라는 재밌는(?) 파라미터도 있는데, 밑의 예시를 보고 이해할 수 있다
( // Evaluate someValue every 0.2 seconds repeatedly until it equals 100, or fails if it timeouts after 5.5 seconds.)
👉 사진에 짤려서리..
Types/Classes도 테스트해볼 수 있게 해뒀고
nil인지 여부와 true/false 여부를 함께 테스트해볼 수 있는 친구들도 정의해뒀다
그 외에도 정말 많다 https://github.com/Quick/Nimble 👈 여기서 보실 수 있습니당..!
Reference
https://github.com/Quick/Quick/blob/master/Documentation/ko-kr/NimbleAssertions.md
'🍏 > Unit & UI Test' 카테고리의 다른 글
[Test-Concept] 테스트 왜 필요하고 해야하는가?! (0) | 2019.09.01 |
---|---|
[Test-Concept] 테스트 피라미드 (0) | 2019.09.01 |
[Unit Test] 테스트 코드에 대한 다양한 의견들 (0) | 2019.08.20 |
[Quick] Unit Test 라이브러리 - Quick (0) | 2019.08.12 |
[Unit Testing] Unit Testing과 예제(+ ViewModel을 유닛테스팅해보자) (0) | 2019.04.15 |
- Total
- Today
- Yesterday
- Flutter Text Gradient
- flutter 앱 출시
- flutter dynamic link
- Django FCM
- METAL
- Flutter 로딩
- Flutter Spacer
- 장고 URL querystring
- DRF APIException
- drf custom error
- Sketch 누끼
- SerializerMethodField
- 플러터 얼럿
- ipad multitasking
- 구글 Geocoding API
- cocoapod
- Django Firebase Cloud Messaging
- Django Heroku Scheduler
- PencilKit
- flutter build mode
- 플러터 싱글톤
- Flutter Clipboard
- Python Type Hint
- 장고 Custom Management Command
- Watch App for iOS App vs Watch App
- Flutter getter setter
- ribs
- Dart Factory
- github actions
- flutter deep 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 |