2. Command (命令)對象行為模式,其實質就是將動作封裝為一個對象,而不關心動作的接收者。這樣動作的接收者可以一直到動作具體執行時才需確定。接口Test就是一個Command集,使得不同類的不同測試方法可以通過同一種接口Test構造其框架結構。這樣對測試的集成帶來了很多方便。
JUnit的Exception的拋出機制
JUnit的異常層次分為三層:1.Failure,客戶預知的測試失敗,可以被Assert方法檢測到;2. Error,客戶測試的意外造成的;3.Systemerror, JUnit的線程死亡級異常,這種情況一般很少發生。JUnit的這三種異常在TestResult類的RunProtected()方法得到很好體現。這里用Protectable接口封裝了Test的執行方法,其實p.protect執行的就是test.runBare()。
public void runProtected(final Test test, Protectable p)
{
try {p.protect();}
catch (AssertionFailedError e)
{addFailure(test, e);}
catch (ThreadDeath e)
{rethrow e;}
catch (Throwable e)
{addError(test, e);}
}
代碼首先檢查是否是Assertion FailedError,然后判斷是否是嚴重的ThreadDeath。這種異常必須Rethrow,才能保證線程真正的死亡,如果不是,說明它是一種意外。