본문 바로가기
개발 기타

유닛테스트 코드 잘짜는 꿀팁

by RWriter 2022. 3. 5.
반응형

결론: 좋은 코드를 참고하자. 사용하는 기술의 깃허브를 참고하자.

 

이하 내용이 장황할 수 있습니다.^^

 

 

 

버그 없는 소프트웨어를 만들기 위해서 테스트과정은 꼭 필요합니다.

 

테스트하는 환경, 범위 등을 고려하면 테스트를 몇가지 종류로 나눌 수 있는데요,

그 중 유닛테스트(Unit test)는 가장 작은 범위에서의 테스트를 말하고 주로 코드로 작성하는 테스트를 말합니다.

 

마틴 파울러의 테스트 피라미드 개념으로 보면 가장 아랫 단계입니다. 

https://martinfowler.com/articles/practical-test-pyramid.html

 

The Practical Test Pyramid

Find out what kinds of automated tests you should implement for your application and learn by examples what these tests could look like.

martinfowler.com

 

내가 작성한 가장 작은 단위(unit)의 코드, 혹은 함수와 같이 외부환경과 가장 고립되어 단독으로 테스트할 수 있어야 하지요.

 

유닛테스트는 기능을 만든 개발자가 짜기 때문에 테스트 코드를 작성하는게 어렵지 않습니다. 로직 안에서 검증이 필요한 부분을 가정하여 짜면 되니깐요.

 

 

꿀팁

제가 생각하는 테스트잘짜는 꿀팁은 내가 사용하는 라이브러리 깃헙을 살펴보는 것입니다.

 

예를 들어

- 스프링부트의 테스트 환경을 제어하고 싶다 라던지..

- 외부 라이브러리를 사용하고는 있는데 테스트를 어떻게 짜야 할지 막막할 때? 

 

개발하는 프로젝트에서 사용하는 프레임워크나 라이브러리들이 관리되는 깃허브를 보면 거기에도 많은 테스트코드가 있습니다. 오랫동안 잘 유지되어온 기술들은 매우 꼼꼼하게 테스트코드가 작성되어 있죠. 

 

스프링 부트 프로젝트의 일부만 봐도 엄청 많습니다.

https://github.com/spring-projects/spring-boot/tree/main/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context

 

 

제가 최근 사용한 resilience4j 의 circuit breaker도 어떤 식으로 유닛테스트를 짜야하는지 잘 나와 있습니다.

https://github.com/resilience4j/resilience4j/blob/master/resilience4j-circuitbreaker/src/test/java/io/github/resilience4j/circuitbreaker/CircuitBreakerTest.java

 

 

테스트코드를 참고하면

- 어느 수준까지 테스트를 짜야 할지도 가늠할 수 있고

- 해당 라이브러리를 어떻게 사용해야 하는지도 감을 잡을 수 있고

- 테스트코드를 짜기 위한 설정, 보조 기술등의 정보도 얻을 수 있습니다. 

 

 

network client (feign 등..) 의 테스트코드를 보면 wiremock 같은 테스트서버를 구동할 수 있는 기술을 사용하기도 하고..

orm (hibernate, exposed 등..) 의 테스트코드를 보면 각종 db에 대한 테스트 설정 등도 참고할 수 있죠.

 

하지만 꽤 복잡하기도 하여 쉽게 흡수하기 어렵긴 해도

좋은 테스트 코드를 참고 하는 것은 아무 큰 도움이 되므로 적극 추천하는 부분입니다.

 

반응형

댓글