티스토리 뷰
안녕하세요 :) Zedd입니다.
해가 진짜 길어졌네요..아직 밖이 밝아........
오늘은 Quick과 Nimble 간단히 사용해보기..!!
[Quick]
- Unit tests에서 사용
- Behavior-driven development(BDD) framework.
[Nimble]
- Unit tests에서 사용
- Matcher framework
# 사용법
# Podfile
use_frameworks!
target "MyApp" do
# Normal libraries
abstract_target 'Tests' do
inherit! :search_paths
target "MyAppTests"
target "MyAppUITests"
pod 'Quick' ✅
pod 'Nimble' ✅
end
end
Podfile에 추가하여 사용.
# Quick
BDD에 대해서는 자세히 설명은 안하겠음. (BDD에 대해 이해하기 쉬운 설명은 if Kakao 세션이었던 kotest가 있다면TDD 묻고 BDD로 가! 참고)
간단하게 동작(행위)에 초점을 맞춘 개발이라고 보면 될 듯.
Quick은 테스트를 동작 주도 개발로 작성할 수 있도록 도와주는 프레임워크.
Quick에 대한 문서는 여기 참고. (무려 한국어로 번역이 되어있음)
보통 테스트를 작성하면
import XCTest
class ZeddTests: XCTestCase {
override func setUpWithError() throws {
// setUp
}
override func tearDownWithError() throws {
// tearDown
}
func testExample() throws {
// some test code
}
}
이런식으로 XCTestCase를 상속한 class를 만들텐데, Quick을 사용하면
class ZeddSpec: QuickSpec {
override func spec() {
}
}
이런식으로 QuickSpec이라는 것을 상속한 Spec 클래스를 만들고, spec메소드를 override한다.
Spec자체가 테스트케이스가 된다.
🙋 : 이게 어떻게 가능..?
🧑💻 : QuickSpec이 XCTestCase의 Subclass.
@interface QuickSpec : XCTestCase
Quick은 BDD에 맞게, Given / When / Then으로 사용자 스토리를 나눈다.
- Given (설명하려는 동작)
- When (해당 동작 / 동작의 컨텍스트)
- Then (발생할 것 으로 예상되는 동작)
ex.
Given : 사용자가 게임을 하고 있다.
When : 한번 이동한다.
Then : 다른 플레이어로 전환되어야 한다.
Quick에서는
Describe (Given)
Context (When)
It (Then)
이렇게 대응된다.
💡 동작 테스트를 작성할 때 중요한 포인트 :
- 정확히 이 애플리케이션 코드가 무엇을 해야 하는지?
- 테스트가 오직 동작만을 테스트하는가? 또는 코드가 다르게 작동함에 따라 실패할 수 있는가?
1. Describe
설명하려는 동작
class ZeddSpec: QuickSpec {
override func spec() {
describe("사용자가 게임을 하고 있다") { ✅
}
}
}
2. Context
해당 동작 / 동작의 컨텍스트
class ZeddSpec: QuickSpec {
override func spec() {
describe("사용자가 게임을 하고 있다") {
context("한번 이동한다") { ✅
}
}
}
}
3. It
class ZeddSpec: QuickSpec {
override func spec() {
describe("사용자가 게임을 하고 있다") {
context("한번 이동한다") {
it("플레이어가 전환되어야 한다") { ✅
}
}
}
}
}
4, Assertion 코드 작성
class ZeddSpec: QuickSpec {
override func spec() {
describe("사용자가 게임을 하고 있다") {
context("한번 이동한다") {
it("플레이어가 전환되어야 한다") {
// Assertion 코드 작성 ✅
}
}
}
}
}
그리고 it closure안에 Assert 코드를 넣으면 된다.
# Nimble
이제 it안에 Assert문을 넣으면 될 것 같은데..Nimble?
XCTest assertions에는
1. 매크로가 충분하지 않음.
2. asynchronous tests가 어려움
과 같은 단점이 있는데,
Nimble은 XCTest assertions의 단점을 보완한 Assertion(Matcher) 프레임워크라고 보면 될 것 같다.
Nimble에서는 expect(..).to 라는 메소드를 사용한다.
// Swift
expect(1 + 1).to(equal(2))
expect(1.2).to(beCloseTo(1.1, within: 0.1))
expect(3) > 2
expect("seahorse").to(contain("sea"))
expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi"))
expect(ocean.isClean).toEventually(beTruthy())
이렇게 사용이 가능.
아까 예제에서 it안에 assertion을 Nimble을 이용해 작성해보면,
class ZeddSpec: QuickSpec {
override func spec() {
describe("사용자가 게임을 하고 있다") {
context("한번 이동한다") {
it("플레이어가 제드로 전환되어야 한다") {
expect(board.state).to(equal(.player("zedd")) ✅
}
}
}
}
}
그 외 메소드들은 github.com/Quick/Nimble 참고.
오늘은 간단하게만 본거고..Quick과 Nimble에 대한 세부적인 사항들은 따로 공부해야게따
참고
medium.com/inloopx/tdd-using-quick-nimble-244b14b09e3d
www.raywenderlich.com/135-behavior-driven-testing-tutorial-for-ios-with-quick-nimble
'공부' 카테고리의 다른 글
Carthage 사용해보기 (0) | 2021.04.17 |
---|---|
Carthage (0) | 2021.04.15 |
Diffable Datasource - supplied item identifiers are not unique (1) | 2021.04.12 |
Diffable Datasource (3) | 2021.04.06 |
TextStyle과 UIFontMetrics(with Custom Font) (0) | 2021.04.05 |
- fastlane
- Xcode
- Accessibility
- swift delegate
- swift array
- 회고
- WKWebView
- github
- np-hard
- Git
- actor
- IOS
- Combine
- swift3
- 피아노
- 스위프트
- UIBezierPath
- np-complete
- Swift
- ios 13
- WWDC
- 스위프트 문법
- SwiftUI
- swift 공부
- FLUTTER
- swift tutorial
- WidgetKit
- swift sort
- 제이슨 파싱
- iOS delegate
- Total
- Today
- Yesterday