파이썬으로 되어있는 예제라서, TDD(테스트 주도 개발) 책을 읽으면서 그냥 넘어갔던 부분인데.. 도무지 그냥 넘어갈 만한 부분이 아닌거 같아서 자바로 코딩해보기로 했습니다. 파이썬으로 코딩해도 되겠지만, 저는 자바로.. 그래서 18장을 우선 코딩해봤습니다.
캬~ 재밌네요.
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에 있는게 아닙니다. 직접 구현한 클래스입니다. 구현체는 다음과 같습니다.
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은 다음과 같습니다.
boolean wasRun;
public WasRun(String methodName) {
super(methodName);
wasRun = false;
}
public void testMethod() {
wasRun = true;
}
}
TestCase와 WasRun은 원래 하나의 클래스였는데, 책임이 두 개가 되자(하나는 실행됐는지 여부를 확인하는 플래스, 하나는 동적으로 메소드를 실행하는 역할) 그 즉시 리팩터링을 합니다. 상위 클래스를 만들고 그 쪽으로 Pull Up Field, Pull Up Method를 합니다.
코드도.. 정말 딱 테스트가 통과할 만큼만 만들고, 테스트 성공 시킨 다음에는 상수를 변수로 바꾸는 리팩터링 부터 시작해서, 위에서 언급한 리팩터링까지.. 쫘르륵…
캬.. 역시 그냥 읽는 것 보다 한 번 해보는거랑은 차이가 큽니다.