해당 포스팅은 톰 롱의 Good Code, Bad Code (P.380~389)를 읽고 정리한 글입니다.
적절한 어서션 확인자를 사용하라
어서션 확인자 (assertion matcher)는 보통 테스트 통과 여부를 최종적으로 결정하기 위한 테스트 케이스 내의 코드이다. 테스트 케이스가 실패하면 어서션 확인자는 실패 이유를 설명하는 메세지를 생성한다. 좋은 단위 테스트는 잘 설명된 실패를 해야 한다. 따라서 가장 적절한 어서션 확인자를 선택하는 것이 중요하다.
부적합한 확인자는 테스트 실패를 잘 설명하지 못할 수 있다.
@Test
void inappropriateAssertionMatcher() {
List<String> names = List.of("Alice", "Bob", "Charlie");
// 부적절한 어서션: 실패 시 어떤 요소가 문제인지 알기 어렵다.
assertTrue(names.contains("David"), "David should be in the list");
}
부적합한 어서션 확인자를 사용하면 시험 실패 시 실패의 이유가 제대로 설명되지 않을 수 있다.
해결책 : 적절한 확인자를 사용하라
대부분의 최신 테스트 어서션 도구는 다양한 확인자를 무수히 많이 가지고 있다. 해당 도구에 있는 적절한 어서션 확인자를 사용하면 테스트가 실패할 경우 실패의 이유를 잘 설명한다.
자바는 Truth 라이브러리에서 다양한 확인자를 제공한다.
테스트 용이성을 위해 의존성 주입을 사용하라
하드 코딩된 의존성은 테스트를 불가능하게 할 수 있다.
의존성이 하드코딩될 때 즉, 의존 객체가 생성자에서 생성될 때 동작을 테스트하는 것이 상당이 어려울 수 있다. 인스턴스를 자체적으로 생성하기 때문에, 실제 데이터베이스에 연결하여 조회하는 경우 데이터가 변경될 수 있어 실제 데이터를 사용하는 것은 바람직하지 않다. 또한 실제 인스턴스이기 때문에 부수효과를 발생시킬 수 있다.
해결책 : 의존성 주입을 사용하라
테스트 용이성은 모듈화와 밀접한 관련이 있다. 서로 다른 코드가 느슨하게 결합하고 재설정이 가능하면, 테스트는 훨씬 더 쉬워지는 경향을 띤다. 의존성 주입은 코드를 좀 더 모듈화 하기 위한 효과적인 기술이며, 따라서 코드의 테스트 용이성을 높이기 위한 효과적인 기술이다.
테스트에 대한 몇 가지 결론
소프트웨어를 테스트하기 위해 개발자들이 사용할 수 있는 다양한 기술이 많다. 소프트웨어를 높은 기준으로 작성하고 유지하려면 이러한 기술을 혼용해서 사용해야 하는 경우가 많다. 단위 테스트가 가장 흔한 테스트 유형이지만, 단위 테스트만으로는 테스트의 모든 요구 사항을 충족할 수 없기 때문에 다양한 테스트 유형과 수준에 대해 알아보고 새로운 툴과 기술에 대한 최신 정보를 유지하는 것이 좋다.
'📚 개발자의 서재 > Good Code, Bad Code' 카테고리의 다른 글
[Good Code Bad Code] 마무리 (0) | 2025.03.10 |
---|---|
[Good Code Bad Code] 단위 테스트의 실제 - 4 (0) | 2025.03.08 |
[Good Code Bad Code] 단위 테스트의 실제 -3 (0) | 2025.03.07 |
[Good Code Bad Code] 단위테스트의 실제-2 (0) | 2025.03.06 |
[Good Code Bad Code] 단위 테스트의 실제 -1 (0) | 2025.03.05 |