2012-02-14 85 views
4

我想知道在斷言失敗後是否有簡單的方法來完成測試。我們曾經使用伽利略進行所有的自動測試,但我們已經移動了Visual Studio測試框架。我們有一種方法可以讓測試失敗,但是會繼續。MSTEST - 在斷言失敗後繼續

 public static bool DoAssertAndContinue(Action assert) 
    { 
     try 
     { 
      assert(); 
      return true; 
     } 
     catch (AssertionException ae) 
     { 
      ConfigContext.WriteLine(ae.Message); 
      return false; 
     } 
    } 

這是我們之前使用...它會被稱爲是這樣的:

assertionResults.Add(Automation.Utils.CommonMethods.DoAssertAndContinue(() => Assert.IsTrue(detail.ValidateName(boo, urns)))); 

我只是想弄清楚效仿我們收到了,而不必最好的辦法重構我們所有的測試。

回答

4

而不是AssertionException,現在應該捕獲UnitTestAssertException這是所有mstest斷言失敗的基本異常。

+0

這對我有用。我將其更改爲UntiTestException,現在它工作正常。我正在努力添加完整的堆棧報告。 – Woundedbear 2012-02-27 16:17:34

0

MsTest框架在失敗的斷言中引發異常。單元測試方法的傳播是導致測試失敗的原因。如果你想繼續失敗的斷言,你只需要處理這個異常,並防止它逃避方法。

+0

我想我對此有點困惑。我在這裏沒有正確捕捉異常嗎?什麼是正確捕捉它的例子,所以它不會逃避方法? – Woundedbear 2012-02-22 19:40:40

1

您也可以在MSTest中使用Try/Catch。在Catch塊中,您可以捕獲特定的錯誤並使用Console.Write打印以瞭解錯誤。我建議你看看這個thread瞭解更多細節。

編輯1:就我個人而言,我不會使用try/catch來通過我的測試方法。我寫了一個測試方法來查找實際產品中的缺陷。所以如果你期望你的調用方法會給你一些特定的異常,那麼我會建議使用ExpectedException屬性。如果您正在爲單個測試數據運行測試方法,則這適用。

現在,如果您想將多個測試數據傳入您的測試方法。那麼我會建議去數據驅動的測試用例。在這裏,您可以將所有測試數據保存在XML或XLS或數據庫中。然後使用該輸入文件,您可以將多個測試數據輸入到您的測試方法中。如果您的調用方法向您發送一些異常,請嘗試不要在這裏使用try/catch和任何測試數據,然後查看MSTest是否會處理它並移動到下一個測試數據。如果它移動然後在測試結果窗口中,您將能夠看到爲什麼特定的測試數據您的方法失敗。對於數據驅動的概念,請參閱link

+0

我想我對此有點困惑。我在這裏沒有正確捕捉異常嗎?什麼是正確捕捉它的例子,所以它不會逃避方法? – Woundedbear 2012-02-23 20:31:02

+0

更新了我的答案。希望這會幫助你。 – 2012-02-25 20:29:25