TDDBE - xUnit 21장
ToDO
테스트 결과 출력하기
테스트 중에서도 잘 실행하고 종료된 상황을 테스트 합니다.
private WasRun test;
public TestCaseTest(String methodName) {
super(methodName);
}
public void testTemplateMethod(){
test = new WasRun("testMethod");
test.run();
assert test.log.equals("setUp testMethod tearDown ");
}
public void testResult(){
test = new WasRun("testMethod");
TestResult result = test.run();
assert result.summary().equals("1 run, 0 failed");
}
public static void main(String[] args) {
new TestCaseTest("testTemplateMethod").run();
new TestCaseTest("testResult").run();
}
}
모든 테스트 케이스 마다 매번 결과를 확인할 수 있도록 설계를 합니다. 그래서 run() 메소드에서 실행 결과를 나타내는 TestResult를 반환 하도록 합니다.
String methodName;
public TestCase(String methodName) {
this.methodName = methodName;
}
public TestResult run() {
TestResult result = new TestResult();
result.testStarted();
setUp();
try {
Method method = this.getClass().getMethod(methodName, null);
method.invoke(this, null);
} catch (Exception e) {
throw new RuntimeException(e);
}
tearDown();
return result;
}
protected void tearDown() {}
protected void setUp() {}
}
물론 첨부터 저렇게 구현하진 않았습니다. 처음에는 그냥 return new TestResult()를 했다가. TestResult에서 설계가 들어갑니다. 결과값을 testStarted()라는 걸 호출 해서 속에 있는 카운터를 증가시키는 구조로 말이죠.
int run;
public void testStarted(){
this.run += 1;
}
public String summary() {
return run + " run, 0 failed";
}
}
얘도 첨엔 이렇게 안 생겼었고, 처음엔 상수를 반환했습니다. 그랬다가 일단 앞에 있는 실행 갯수만을 변수화 했고, 위의 설계 결정에 따라 구현을 변경한 겁니다.
리팩터링과, 설계, 그리고 TDD의 관계를 생각하게 만드는 챕터였습니다.