首先,try/catch塊是否必要?如果沒有測試方法都可能拋出異常最好是保持簡單的測試
assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut"));
如果失敗消息並不需要輸出到任何特定的輸出流,但要保留定製消息
String failureMsg = "You Are Now Logged Out is NOT present on the web page";
assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut"), failureMsg);
String successMsg = "You Are Now Logged Out is present on the web page";
System.out.println(successMsg);
如果日誌是在您的測試
try {
assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut"));
System.out.println("You Are Now Logged Out is present on the web page");
} catch (Throwable e) {
String failureMsg = "You Are Now Logged Out is NOT present on the web page";
fail(failureMsg, e)
System.out.println(failureMsg);
}
作爲一個風格問題絕對必要的,我更喜歡第一個選項。除非有令人信服的理由將代碼包裝在Try/Catch中,否則我會建議您不要這樣做,因爲:
- 根據所提供的代碼段不需要; assertTrue()調用會拋出一個AssertionError,它會使測試無法正常進行,並且有一個允許自定義消息的重載版本。捕獲所有Throwable實例將捕獲AssertionError實例並導致您重新拋出它(不必要的),或者調用失敗()(多餘的,它只是拋出一個新的AssertionError)
- 重新拋出比Asse田之外的異常會導致測試失敗,並錯誤條件,而不是一個失敗狀態,表明試驗失敗你沒有預料到的方式,這通常被認爲是更嚴重的錯誤
此外,通常不建議捕獲Throwable的實例。
如果我刪除了try/catch,那麼我在TestNG報告中看到的唯一一條異常錯誤是143行。所以我想我可以看看源代碼來查看失敗的位置,但這不是非常友好。 如果我添加try/catch,我可以將一個msg記錄到控制檯,並確切地看到問題所在。但是,我想將控制檯輸出保存到文件中。我相信在Eclipse中這是可能的,但我不知道該怎麼做? – RalphF
另一個奇怪的事情是這條線是有效的(它強制失敗,並且我得到指向控制檯中第143行的空指針異常: assertTrue(selenium。isTextPresent(「您現在已經登錄xxxOut」)); 但是這條線路通過並且它不應該: assertEquals(「您現在已經註銷」,driver.getPageSource()。contains(「You Are Logged xxxOut」)); 我不知道爲什麼這條線路通過? – RalphF