목을 사용하지 말라

    함수를 테스트하는 데 집중하다 보면 목(mock)이나 스텁(stub)을 자주 쓰지 않게 된다11. 특히 테스트를 위해 목을 만들어내는 특별한 라이브러리가 필요 없어진다.

    icon_joe 조에게 묻는다 JUnit의 파라미터화한 테스트는 어떤가?

    JUnit 5는 함수에 의해 생성된 여러 가지 다른 파라미터를 사용해 테스트를 실행할 수 있게 해준다.

    각각의 동적인 입력에 대한 테스트를 생성하는 기능은 훌륭하다. 이를 통해 각각의 결과를 IDE에서 독립적으로 볼 수 있다.

    처음에는 파라미터화한 테스트가 속성 테스트를 충분히 대신할 수 있을 것 같아 보이지만, 수백 또는 수천 가지 테스트를 실행할 때는 파라미터화한 테스트가 잘 작동하지 않는다. 그리고 속성 기반 테스트에서 수백 가지나 수천 가지 값을 테스트하는 일은 아주 흔하다.

    따라서 당장은 난수 값을 사용해 그냥 여러 번 테스트를 반복하는 것이 더 쉽다.

    객체 지향 세계에서는 테스트가 가변적인 상태를 감추고 있는 객체와 상호작용해야 하는 경우가 많다. 불투명한 객체 두 개를 함께 테스트하기란 아주 어렵기 때문에, 작성한 클래스와 협력하는 객체들에 대해 가짜 버전을 만들어낸다. 이들은 목이나 스텁일 수 있는데, 목과 스텁은 테스트에 필요한 세부 사항이 얼마나 많으냐에 따라 달라진다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.