본문 바로가기

프로그래밍/테스트코드

(2)
인수테스트 격리 유스콘 마지막 과제를 진행하고 나서 제이슨님이 아래와 같은 질문을 주셨다. 인수테스트를 작성하셨는데 테스트 격리를 매번 테스트를 수행하고 초기화를 해주는 작업을 하신 것 같다. 선택하신 방법 외에 어떤 방법이 있는지? 나는 @Transactional 어노테이션을 쓰면 될 것 같다고 하였고 추가로 테스트 메서드에 어노테이션을 붙여주면 정상적으로 동작할 것 같냐는 질문에 나는 아래와 같이 답변하였다. 동작할 것 같다. 발생할 수 있는 문제로는 실제로 데이터의 변경이 일어나는 서비스 로직에 @Transactional 어노테이션을 붙이지 않고 테스트에만 붙이는 경우 테스트는 통과하는데 실제로 해당 로직에서 에러가 발생할 수도 있을 것 같다. 과연 정상적으로 동작하였을까? 한번 알아보도록 하자. 테스트 격리 인수..
Test Double, Stub, Spy, Mock 대역(Test Double) 외부요인(테스트 대상의 파일 시스템접근이나 DB에서 데이터 조회, 외부 서버와 http통신)에 의존적인 테스트는 때때로 원활한 테스트를 진행하기 힘든 경우가 발생할 수 있다. 이때 실제 객체를 대신 사용할 객체를 테스트 더블이라고 한다. 테스트 더블의 종류에는 Stub, Fake, Spy, Mock등이 있다. Stub 구현을 단순한 것으로 대체한다. 전체 기능이 아닌 테스트에 맞게 일부 기능에 집중하여 원하는 기능대로 동작하게 구현한다. Fake 실제 구현이 존재하는 객체로 실제로는 사용할 수 없지만, 테스트를 위해 사용하는 객체 수행하려는 테스트가 외부 환경에 의존적인 경우(fake DB) Spy 호출된 내역을 기록한다. 기록한 내용은 테스트 결과를 검증할 때 사용한다. M..