Dot-Net

如何使用“正確”呼叫堆棧創建自定義 MSTest 斷言方法

  • February 8, 2012

我正在為我的單元測試編寫擴展方法來測試值。一個天真的例子是:

public static void ShouldBeTrue(this bool value)
{
   if(!value)
   {
       throw new AssertFailedException("Expected true");
   }
}

並在測試中使用它:

someBool.ShouldBeTrue();

一切正常,除了拋出異常的行將是我在“測試結果”視窗中點兩下失敗的測試時最終出現的行,並且在“測試結果詳細資訊”中,拋出行顯示在錯誤堆棧跟踪中。

有沒有辦法解決這個問題,所以“someBool.ShouldBeTrue();”:

  1. 在“測試結果”視窗中點兩下失敗測試的行是打開的嗎?
  2. 是堆棧跟踪中的唯一行嗎?

我想我找到了答案。您需要做的就是將您的自定義斷言類/方法放入一個單獨的程序集中。如果您願意,您可以在同一解決方案中將此作為單獨的項目。

已經為此編寫了一個類庫:http: //geekswithblogs.net/sdorman/archive/2009/01/31/adding-custom-assertions-to-mstest.aspx

上面連結中有一段話:

…作為參考,那些不可用的斷言是:

  • 斷言.IsNaN
  • 斷言.IsEmpty
  • 斷言.IsNotEmpty
  • 斷言.更大
  • 斷言.GreaterOrEqual
  • 少斷言
  • 斷言.LessOrEqual
  • 斷言.IsAssignableFrom
  • 斷言.IsNotAssignableFrom
  • CollectionAssert.IsEmpty
  • CollectionAssert.IsNotEmpty
  • StringAssert.AreEqualIgnoringCase
  • StringAssert.IsMatch
  • FileAssert.AreEqual
  • FileAssert.AreNotEqual

…我創建了一個類庫,其中包括除 FileAssert 方法和 StringAssert.IsMatch 之外的所有這些。…您可以從我的 SkyDrive 公共文件夾下載課程:https ://skydrive.live.com/?cid=93d618d639ec9651&id=93D618D639EC9651%211283

引用自:https://stackoverflow.com/questions/4215513