목을 사용하지 말라
함수를 테스트하는 데 집중하다 보면 목(mock)이나 스텁(stub)을 자주 쓰지 않게 된다11. 특히 테스트를 위해 목을 만들어내는 특별한 라이브러리가 필요 없어진다.
조에게 묻는다 JUnit의 파라미터화한 테스트는 어떤가?
JUnit 5는 함수에 의해 생성된 여러 가지 다른 파라미터를 사용해 테스트를 실행할 수 있게 해준다.
각각의 동적인 입력에 대한 테스트를 생성하는 기능은 훌륭하다. 이를 통해 각각의 결과를 IDE에서 독립적으로 볼 수 있다.
처음에는 파라미터화한 테스트가 속성 테스트를 충분히 대신할 수 있을 것 같아 보이지만, 수백 또는 수천 가지 테스트를 실행할 때는 파라미터화한 테스트가 잘 작동하지 않는다. 그리고 속성 기반 테스트에서 수백 가지나 수천 가지 값을 테스트하는 일은 아주 흔하다.
따라서 당장은 난수 값을 사용해 그냥 여러 번 테스트를 반복하는 것이 더 쉽다.
객체 지향 세계에서는 테스트가 가변적인 상태를 감추고 있는 객체와 상호작용해야 하는 경우가 많다. 불투명한 객체 두 개를 함께 테스트하기란 아주 어렵기 때문에, 작성한 클래스와 협력하는 객체들에 대해 가짜 버전을 만들어낸다. 이들은 목이나 스텁일 수 있는데, 목과 스텁은 테스트에 필요한 세부 사항이 얼마나 많으냐에 따라 달라진다.