유닛 테스트 코드 네이밍 컨벤션
유닛 테스트 네이밍 컨벤션
테스트 네이밍 컨벤션을 따르는 것은 다른 코드 작성시의 컨벤션을 따르는 것만큼이나 장기적인 프로젝트를 진행하는데 중요하다. 널리 알려진 네이밍 컨벤션을 테스트에 적용함으로써 테스트의 이름만으로 어떤 테스트인지 이해할 수 있게 한다.
적절한 이름을 짓는 것은 어떠한 시도 적절히 번역할 수 없다는 점에서 시와 같다. ~W.H. Auden
네이밍 컨벤션을 선정하기 이전에 그 테스트가 왜 필요한지 테스트의 목적은 무엇인지 먼저 생각해보아야 한다.
테스트 네이밍을 하는데 다음과 같은 몇 가지 추천 방법이 있다.
- 테스트명은 특정한 필요조건을 명시해야 한다.
- 테스트명에는 기대되는 인풋이나 상태와 그에 상응하는 결과값을 포함시킬 수 있다.
- 테스트명은 워크플로우와 아웃풋을 명시하는 선언이나 사실들로 나타내야 한다.
- 테스트명에는 테스트 메서드나 클래스의 이름을 포함할 수 있다.
테스트 네이밍 컨벤션에 대한 몇 가지 예시.
메서드명_테스트하고자하는상태_예상되는결과
단점: 메서드 이름이 바뀌면 테스트명을 변경해주어야 함.
예시: isAdult_AgeLessThan18_False
메서드명_예상되는결과_테스트하고자하는상태
cons: 메서드 이름이 바뀌면 테스트명을 변경해주어야 함.
example: isAdult_False_AgeLessThan18
test테스트진행중인기능명
cons: “test” prefix가 중복된다
example: testIsNotAnAdultIfAgeLessThan18
테스트중인기능명
cons: 이름만으로는 어떤 결과를 원하는지 유추할 수 없다.
example: IsNotAnAdultIfAgeLessThan18
Should_예상되는결과_When_테스트중인상태
cons: `should`와 `when`가 중복되고 이름이 길어진다.
example: Should_ThrowException_When_AgeLessThan18
When_테스트중인상태_Expect_예상되는결과
cons: `when`와 `expect`가 중복됨
example: When_AgeLessThan18_Expect_isAdultAsFalse
Given_조건_When_테스트중인상태_Then_예상되는결과 — Behavior-Driven Development (BDD)
cons: `given`, `should`, `when`가 중복되고 이름이 매우 길어진다.
example: Given_UserIsAuthenticated_When_InvalidAccountNumberIsUsedToWithdrawMoney_Then_TransactionsWillFail
이외에도 수많은 컨벤션이 있지만 테스트 네이밍 컨벤션을 따르는 것은 일단 아무거나 선택해서 테스트를 진행하는 것보다 중요하진 않다.
레퍼런스
https://medium.com/@stefanovskyi/unit-test-naming-conventions-dd9208eadbea