언어의 기본 타입에 Dummy를 활용해 더 명확한 테스트 작성하기
테스트 코드를 작성하면서 언어에서 제공하는 기본 값을 그대로 사용하는 경우
- 해당 값이 테스트에 영향을 주는 값인지
- 혹은 단순히 기본값인지 다른 개발자가 판단하기 어려운 경우가 많음.
이는 결국 가독성과 유지보수에 문제를 일으킬 수도 있음.
목차
- Swift의 기본값을 Dummy 대신 사용한 테스트 코드를 마주한 경우
- Model 과 ViewModel의 구현체 확인
- 테스트 코드에 Dummy 값을 명시적으로 사용한 경우
Swift의 기본값을 Dummy 대신 사용한 테스트 코드를 마주한 경우
아래처럼 테스트코드가 작성되어 있다면, 테스트가 올바르게 작성되었다고 생각하기보다 코드를 볼수록 많는 의문점들이 생겨남
- 많은 의문점들은 테스트 본질이 아닌 부분에 신경쓰게 만들 수 있으며,
- 결국 해당 테스트 코드가 신뢰할 수 있는 테스트인지 확인이 필요한 단계에 도달하게 됨.
func test_display_name() {
// given
let viewModel = UserViewModel(user: User(id: 0, name: ""))
// when
let displayName = viewModel.displayName()
// then
XCTAssertEqual(displayName, "User: ")
}
Model 과 ViewModel의 구현체 확인
위의 테스트 코드가 올바른지 확인하기 위해서는 아래의 코드 구현체를 테스트 코드와 비교하면서 확인하는 작업이 필요함.
struct User {
let id: Int
let name: String
}
class UserViewModel {
private let user: User
init(user: User) {
self.user = user
}
func displayName() -> String {
return "User: \(user.name)"
}
}
테스트 코드에 Dummy 값을 명시적으로 사용한 경우
Dummy 값을 명시적으로 사용한 형태로 변경할 경우 기존 코드와 달리 더 명확히 의도를 드러낼 수 있음
- Given에서 id와 name 중 테스트에 영향을 주는 값과 단순히 기본 값을 구분할 수 있음
- 주어지는 값이 많아지면 많아질수록 테스트에 영향을 주는 값인이 아닌지를 파악하기가 점점 더 어려워지는데, 이를 더 빠르게 파악할 수 있음.
func testDisplayName() {
// given
let viewModel = UserViewModel(user: User(
id: Dummy.int,
name: ""
))
// when
let displayName = viewModel.displayName()
// then
XCTAssertEqual(displayName, "User: ")
}
struct Dummy {
static var string: String = ""
static var int: Int = 0
static var double: Double = 0
static var id: UUID = .init()
static var intArray: [Int] = []
static var stringArray: [String] = []
}
'apple > Testing, Xcode, Environment' 카테고리의 다른 글
UseCase와 Repository 테스트 목적 정리 (1) | 2024.09.20 |
---|---|
[Tuist] Mise Install (2) | 2024.08.31 |
EnableSwiftBuildSystemIntegration (0) | 2023.04.18 |
[XCode] Instruments - Network (0) | 2023.04.18 |
Test Double (Swift) (0) | 2023.01.09 |