TDDBE - xUnit 18장.

파이썬으로 되어있는 예제라서, TDD(테스트 주도 개발) 책을 읽으면서 그냥 넘어갔던 부분인데.. 도무지 그냥 넘어갈 만한 부분이 아닌거 같아서 자바로 코딩해보기로 했습니다. 파이썬으로 코딩해도 되겠지만, 저는 자바로.. 그래서 18장을 우선 코딩해봤습니다.

캬~ 재밌네요.

public class TestCaseTest extends TestCase {

    public TestCaseTest(String methodName) {
        super(methodName);
    }
   
    public void testRunning(){
        WasRun test = new WasRun(“testMethod”);
        assert test.wasRun == false;
        test.run();
        assert test.wasRun == true;
    }
   
    public static void main(String[] args) {
        new TestCaseTest(“testRunning”).run();
    }
}

위에 있는 TestCase는 JUnit에 있는게 아닙니다. 직접 구현한 클래스입니다. 구현체는 다음과 같습니다.

public class TestCase {
   
    String methodName;

    public TestCase(String methodName) {
        this.methodName = methodName;
    }
   
    public void run() {
        try {
            Method method = this.getClass().getMethod(methodName, null);
            method.invoke(this, null);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

이것을 상속받은 WasRun은 다음과 같습니다.

public class WasRun extends TestCase {

    boolean wasRun;
   
    public WasRun(String methodName) {
        super(methodName);
        wasRun = false;
    }

    public void testMethod() {
        wasRun = true;
    }

}

TestCase와 WasRun은 원래 하나의 클래스였는데, 책임이 두 개가 되자(하나는 실행됐는지 여부를 확인하는 플래스, 하나는 동적으로 메소드를 실행하는 역할) 그 즉시 리팩터링을 합니다. 상위 클래스를 만들고 그 쪽으로 Pull Up Field, Pull Up Method를 합니다.

코드도.. 정말 딱 테스트가 통과할 만큼만 만들고, 테스트 성공 시킨 다음에는 상수를 변수로 바꾸는 리팩터링 부터 시작해서, 위에서 언급한 리팩터링까지.. 쫘르륵…

캬.. 역시 그냥 읽는 것 보다 한 번 해보는거랑은 차이가 큽니다.