如何使用“正确”的callstack创建自定义MSTest Assert方法

时间:2010-11-18 13:58:29

标签: .net unit-testing mstest assert

我正在编写用于测试单元测试值的扩展方法。一个天真的例子是:

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

在测试中使用它:

someBool.ShouldBeTrue();

一切正常,除了抛出异常的行将是我在“测试结果”窗口中双击失败的测试时结束的那一行,并且在“测试结果详细信息”中,抛出行显示在错误堆栈跟踪中

有没有办法围绕这个,所以“someBool.ShouldBeTrue();”:

  1. 是双击“测试结果”窗口中的失败测试的行吗?
  2. 是堆栈跟踪中唯一的一行吗?

2 个答案:

答案 0 :(得分:2)

已经为此编写了一个类库:http://geekswithblogs.net/sdorman/archive/2009/01/31/adding-custom-assertions-to-mstest.aspx

上面的链接引用了一句话:

  

...作为参考,那些不可用的断言是:

     
      
  • Assert.IsNaN
  •   
  • Assert.IsEmpty
  •   
  • Assert.IsNotEmpty
  •   
  • Assert.Greater
  •   
  • Assert.GreaterOrEqual
  •   
  • Assert.Less
  •   
  • Assert.LessOrEqual
  •   
  • Assert.IsAssignableFrom
  •   
  • Assert.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

答案 1 :(得分:1)

我想我找到了答案。您需要做的就是将自定义断言类/方法放入单独的程序集中。如果您愿意,可以在同一解决方案中将其作为单独的项目。