더북(TheBook)

다음 코드는 실행과 단언 단계를 담고 있습니다. 또 테스트 이름도 테스트 의도를 담을 수 있는 적절한 이름으로 지어야 합니다.

iloveyouboss_08/test/iloveyouboss/ProfileTest.java

@Test
public void matchAnswersFalseWhenMustMatchCriteriaNotMet() {
    Profile profile = new Profile("Bull Hockey, Inc.");
    Question question = new BooleanQuestion(1, "Got bonuses?");
    Answer profileAnswer = new Answer(question, Bool.FALSE);
    profile.add(profileAnswer);
    Criteria criteria = new Criteria();
    Answer criteriaAnswer = new Answer(question, Bool.TRUE);
    Criterion criterion = new Criterion(criteriaAnswer, 
                                        Weight.MustMatch);
    criteria.add(criterion);
 
    boolean matches = profile.matches(criteria);
 
    assertFalse(matches);
}

 

우리는 matches() 메서드에 대한 지식을 바탕으로 (겉으로 보기에는) 의도하는 대로 동작하는지 검증하는 테스트를 만들었습니다. 코드를 충분히 이해하지 못했다면 시간을 들여 코드가 어떻게 동작하는지 주의 깊게 이해하고 실질적인 테스트로 점점 만들어 가야 합니다.

테스트의 유지 보수성(maintainability)도 고려해 봅시다. 코드는 10줄로 그다지 많지 않아 보입니다. 하지만 앞서 이야기한 조건 15개를 모두 이러한 방식으로 구현하는 것은 문제가 있습니다. 테스트 15개 * 10줄은 20줄도 안 되는 원래 메서드를 유지하기에는 과해 보입니다.

인지적 관점에서 10줄은 특히 우리가 작성한 코드를 전혀 모르는 다른 사람들이 볼 때는 주의 깊게 읽어야 합니다.

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