ToDo
실패한 테스트 보고하기

TestResult에서 실패한 테스트 갯수를 세는 메소드 부터 테스트합니다.

    public void testFailedResultFormatting(){
        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");
    }

총. 1개를 실행했는데, 1개가 실패한 겁니다. 일단, WasRun 클래스에 예외를 발생시키는(실패하는) 테스트를 추가합니다.

    public void testBrokenMethod() throws 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);
        }

예외를 잡는 부분에 대해서 조금 고민을 했는데, InvocationTargetExcepion만 따로 잡고, 나머진 일단 덩어리로 처리해버렸습니다. 어차피 세세하게 분리를 해놔도 각각의 catch 블럭에서 전부 throw new Runtime(e); 으로 구현할꺼기 때문에, 저렇게 덩어리로 잡아버렸습니다.