apple/Testing, Xcode, Environment

언어의 기본 자료형 Dummy를 활용해 더 명확한 테스트 작성하기

lgvv 2024. 12. 2. 02:17

언어의 기본 자료형 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] = []
}