테스트에서 어떤 것을 하기 위해서는 먼저 테스트 상태를 설정하는 준비(arrange) 단계의 일들을 해야 합니다. 예를 들어 ScoreCollection 인스턴스를 생성하고 Scoreable 구현 객체로 add() 메서드를 두 번 호출합니다.
Scoreable 인스턴스를 생성할 때 우리 시스템에서는 Scoreable 인터페이스를 구현하고 있는 클래스를 찾아 이것의 인스턴스를 생성합니다. 혹은 (중첩 클래스로서 테스트 안에서) Scoreable 인터페이스의 getScore 메서드가 반환할 값을 설정할 수 있게 하는 구현을 정의할 수도 있지만, 별도의 불필요한 코드가 많이 필요합니다. 좀 더 단순한 방법은 람다 표현식을 사용하여 Scoreable 인스턴스에서 원하는 값을 반환하도록 지정하는 것입니다. 예를 들어 () -> 5입니다.
테스트를 준비한 후에는 검증하려는 코드인 arithmeticMean 메서드를 실행(act)합니다.
마지막으로 기대하는 결과를 단언(assert)합니다. 우리는 assertThat() 메서드를 사용하는데, 이 메서드는 실제 결과와 matcher 객체를 인자로 받습니다. equalTo 매처는 실제 값과 기대되는 값인 6을 비교합니다. JUnit은 매처에 적용되는 결과가 참이면 테스트를 통과합니다. 그렇지 않으면 테스트는 실패합니다.
equalTo 매처를 사용하려면 org.hamcrest.CoreMatchers 클래스를 정적 임포트하세요(04행).
이제 동작을 검증합니다. JUnit을 실행하고 사랑스러운 녹색 막대를 기다립시다.
테스트가 실제로 아무것도 하지 않는다고 걱정한다면 기댓값을 6에서 다른 것(예를 들어 42)으로 변경해 보세요. JUnit을 재실행하고 테스트가 실패하는지 보세요. 거슬리는 적색으로 변경되었습니다.
실패한 단언문은 오류를 보고하는 것 이상의 일을 합니다. JUnit 자체에서 잡는 런타임 예외를 던져서 테스트를 멈춥니다. 실패한 단언문을 지나치지 마세요. 200달러를 모으지 마세요.6 실패하는 단언문 아래에 어떤 것이 있다면 실행되지 않습니다. 한 가지 팁은 테스트의 가장 마지막에 단언문을 넣는 것입니다.