티스토리 뷰
유닛 테스트 네이밍 컨벤션
테스트 네이밍 컨벤션을 따르는 것은 다른 코드 작성시의 컨벤션을 따르는 것만큼이나 장기적인 프로젝트를 진행하는데 중요하다. 널리 알려진 네이밍 컨벤션을 테스트에 적용함으로써 테스트의 이름만으로 어떤 테스트인지 이해할 수 있게 한다.
적절한 이름을 짓는 것은 어떠한 시도 적절히 번역할 수 없다는 점에서 시와 같다. ~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
'Spring > 테스트' 카테고리의 다른 글
테스트 대상 클래스의 메서드를 모킹하는 방법 (0) | 2022.06.20 |
---|---|
Mockito에서 static 메서드를 mocking하는 방법 (0) | 2022.06.19 |
스프링부트 테스트 코드 작성하기와 Mocking (0) | 2022.06.17 |
- Total
- Today
- Yesterday
- 아키텍처
- 배포
- vim
- RequestBody
- Dap
- ModelAttribute
- RequestPart
- RequestParam
- IDE
- 루나빔
- neovim
- 레디스
- lunarvim
- JavaScript
- 도커
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |