私は最近、 のソース コードを掘り下げています。JUnit-4.11
混乱しているのは、一見冗長なProtectable
インターフェイスです。宣言は次のとおりです。
public interface Protectable {
public abstract void protect() throws Throwable;
}
TestResult
クラスには、次のように匿名インスタンスを実現するメソッドvoid run(final TestCase test)
がProtectable
あります。
protected void run(final TestCase test) {
startTest(test);
Protectable p = new Protectable() {
public void protect() throws Throwable {
test.runBare();
}
};
runProtected(test, p);
endTest(test);
}
runProtected
方法は次のとおりです。
public void runProtected(final Test test, Protectable p) {
try {
p.protect();
} catch (AssertionFailedError e) {
addFailure(test, e);
} catch (ThreadDeath e) { // don't catch ThreadDeath by accident
throw e;
} catch (Throwable e) {
addError(test, e);
}
}
runProtected
おわかりのように、を実行するだけでは何test.runBare();
をするのでしょうか。以下のようなコードを書くことができないのはなぜですか。
protected void run(final TestCase test) {
startTest(test);
test.runBare();
endTest(test);
}