삽질 주도 개발
article thumbnail
Published 2022. 11. 15. 21:32
Unit test naming convention Spring

테스트 코드 네이밍

 

메서드명_테스트상태_기대결과

코드 리팩토링으로 인하여 메서드명이 변경되는 경우 테스트 명 또한 변경되어야 하는데, 변경되지 않으면 나중에 이 TC를 이해하기 어렵게 되므로 바람직하지 않다는 의견이 있다.

예시

  • isAdult_AgeLessThan18_False
  • withdrawMoney_InvalidAccount_ExceptionThrown
  • admitStudent_MissingMandatoryFields_FailToAdmit

 

메소드명_기대결과_테스트상태

위와 비슷한 형태이지만, 일부 개발자들은 이런 컨벤션을 사용할 것을 추천한다. 이 컨벤션 또한 메서드명이 바뀌면 나중에 이해하기 어렵다는 단점이 있다.

예시

  • isAdult_False_AgeLessThan18
  • withdrawMoney_ThrowsException_IfAccountIsInvalid
  • admitStudent_FailToAdmit_IfMandatoryFieldsAreMissing

 

test[테스트할 기능]

테스트할 기능이 테스트명의 일부로 사용되어 쉽게 읽을 수 있도록 해 준다.
그러나 "테스트" 접두사가 중복된다는 주장도 있다. 그러나 일부 개발자들은 이러한 형태의 네이밍을 사용하는 것을 좋아한다.

예시

  • testIsNotAnAdultIfAgeLessThan18
  • testFailToWithdrawMoneyIfAccountIsInvalid
  • testStudentIsNotAdmittedIfMandatoryFieldsAreMissing

 

테스트할 기능

문서화된 형태의 유닛 테스트를 수행하므로 권장되는 방법이다.
하지만, 이름에서 예상되는 결과에 대한 단서가 없다.

예시

  • IsNotAnAdultIfAgeLessThan18
  • FailToWithdrawMoneyIfAccountIsInvalid
  • StudentIsNotAdmittedIfMandatoryFieldsAreMissing

 

should_기대결과_When_테스트상태

이러한 형태의 네이밍은 많은 사람들이 테스트에 대해 쉽게 이해할 수 있기 때문에 많이 사용된다.
하지만, 긴 이름인 shouldwhen이 중복해서 사용된다.

예시

  • should_ThrowException_When_AgeLessThan18
  • should_FailToWithdrawMoney_ForInvalidAccount
  • should_FailToAdmit_IfMandatoryFieldsAreMissing

 

when_테스트상태_Expect_기대결과

위와 같다. 상황에 따라 적절하게 선택하면 된다.
긴 이름인 whenexpect가 중복해서 사용된다.

예시

  • When_AgeLessThan18_Expect_isAdultAsFalse
  • When_InvalidAccount_Expect_WithdrawMoneyToFail
  • When_MandatoryFieldsAreMissing_Expect_StudentAdmissionToFail

 

given_사전조건_When_테스트상태_Expect_기대결과

행동 주도 개발(BDD)의 일부로 개발된 네이밍 컨벤션에 기초한다. 이 아이디어는 테스트를 세개의 파트로 나누어 전제 조건, 테스트 상태, 기대 결과가 위 형식대로 네이밍되는 형태이다.
하지만, 긴 이름인 given, when, then을 중복해서 사용된다.

예시

  • Given_UserIsAuthenticated_When_InvalidAccountNumberIsUsedToWithdrawMoney_Then_TransactionsWillFail

 

Reference

 

Unit Test Naming Conventions

Test naming is important for teams on long term project as any other code style conventions. By applying code convention in tests you…

medium.com

 

'Spring' 카테고리의 다른 글

Spring 환경별 profile 분리  (0) 2022.11.17
JPA 사용해보기  (0) 2022.11.15
Tomcat과 Spring의 상호작용  (0) 2022.11.15
RequestParam으로 List 형식 받기  (0) 2022.07.07
@Primary, @Qualifier  (0) 2022.04.29