단위 테스트를 할 때 getXXX() 메서드로 클래스의 상태만 테스트 한가요?

2015-09-06 15:54

TDD는 아니지만 테스트를 할 때 궁금합니다. 켄트 벡의 테스트 주도 개발 서적도 그렇고, 채수원 님의 서적도 그렇고, 테스트 클래스들을 보면 하나같이 assertEquals(expected, AClass.getField()); 코드처럼 어떤 클래스의 getXXX() 메서드를 호출해서 클래스의 상태(필드)를 체크하는데, 이 메서드를 제공하지 않는 클래스는 어떻게 상태를 체크해야 될까요?

1개의 의견 from SLiPP

2015-09-06 19:50

객체의 상태 값을 getter 메서드 없이 테스트하고 싶다면 equals method를 활용해 테스트할 수 있습니다.

만약 다음과 같은 클래스가 있다고 생각해 보죠.

public class Timer {
    private final int count;
    public Timer(int count) {
        this.count = count;
    }
    public boolean running() {
        if (count > 0) return true;
        return false;
    }
    public Timer move() {
        return new Timer(count - 1);
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Timer timer = (Timer) o;
        return count == timer.count;
    }
    @Override
    public int hashCode() {
        return count;
    }
}

이 Timer 클래스의 move method는 어떻게 테스트하면 될까요? 많은 개발자가 Timer 클래스를 테스트하기 위해 getCount() 메서드를 생성하려고 하는데요. 그 보다는 다음과 같이 테스트할 수 있겠죠.

Timer timer = new Timer(5);
timer = timer.move();
assertEquals(new Timer(4), timer);

이와 같이 equals 메서드를 활용해 테스트한다면 굳이 getCount() 메서드를 추가하지 않아도 됩니다.

의견 추가하기

연관태그

← 목록으로