TDDBE - xUnit 22장
ToDo
실패한 테스트 보고하기
TestResult에서 실패한 테스트 갯수를 세는 메소드 부터 테스트합니다.
public void testFailedResultFormatting(){
TestResult result = new TestResult();
result.testStarted();
result.testFailed();
assert result.summary().equals("1 run, 1 failed");
}
TestResult result = new TestResult();
result.testStarted();
result.testFailed();
assert result.summary().equals("1 run, 1 failed");
}
TestResult의 메소드가 갯수를 잘 세고 있는지 확인합니다. 구현은 간단합니다.
public class TestResult {
int runCount;
int failedCount;
public void testStarted(){
this.runCount += 1;
}
public void testFailed() {
this.failedCount += 1;
}
public String summary() {
return runCount + " run, " + failedCount + " failed";
}
}
그리고 이제 실패하는 테스트 결과를 확인하는 테스트를 작성합니다.
public void testFailedResult(){
test = new WasRun("testBrokenMethod");
TestResult result = test.run();
assert result.summary().equals("1 run, 1 failed");
}
test = new WasRun("testBrokenMethod");
TestResult result = test.run();
assert result.summary().equals("1 run, 1 failed");
}
총. 1개를 실행했는데, 1개가 실패한 겁니다. 일단, WasRun 클래스에 예외를 발생시키는(실패하는) 테스트를 추가합니다.
public void testBrokenMethod() throws RuntimeException {
throw new RuntimeException("예외 발생하는 테스트");
}
throw new RuntimeException("예외 발생하는 테스트");
}
그리고 TestCase의 run() 메소드에서 예외가 발생할 때마다 TestResult에 처음에 만들어 둔 testFailed()를 호출합니다.
try {
Method method = this.getClass().getMethod(methodName, null);
method.invoke(this, null);
} catch (InvocationTargetException e) {
result.testFailed();
} catch (Exception e) {
throw new RuntimeException(e);
}
Method method = this.getClass().getMethod(methodName, null);
method.invoke(this, null);
} catch (InvocationTargetException e) {
result.testFailed();
} catch (Exception e) {
throw new RuntimeException(e);
}
예외를 잡는 부분에 대해서 조금 고민을 했는데, InvocationTargetExcepion만 따로 잡고, 나머진 일단 덩어리로 처리해버렸습니다. 어차피 세세하게 분리를 해놔도 각각의 catch 블럭에서 전부 throw new Runtime(e); 으로 구현할꺼기 때문에, 저렇게 덩어리로 잡아버렸습니다.