非阻塞断言对应

时间:2014-05-25 14:09:38

标签: c# unit-testing

Assert的非阻塞对应物是什么,目前像AreEqual这样的方法(失败时)抛出异常并保持。

我想用报告运行所有测试,而不需要用户进行任何交互。

更新,简单的例子:

Assert.AreEqual(3,5);
Assert.AreEqual(3,5);

只会执行第一个,抛出异常。我想没有例外,没有互动,只是一个报告说两次失败。

2 个答案:

答案 0 :(得分:3)

  

Assert

的非阻塞对应物是什么?

没有一个,因为通常在第一个断言之后知道哪个其他断言失败了。但是,如果你真的想要,你可以做几件事来捏造它。

一个想法是使用日志框架简单地输出错误消息,特别是在您认为其余测试可能成功的情况下。

_assertLogger.LogErrorIf(a.ID == 0, "a's ID was not set");

另一种方法是将您的断言包装在捕获结果的方法中,然后从断言产生的异常集合中生成AggregateException

_assertions.Add(() => Assert.IsNotNull(a));
_assertions.Add(() => Assert.AreNotEqual(0, a.ID));
_assertions.ThrowIfError();

答案 1 :(得分:1)

我将给出一个练习答案 - 每次测试写一个一个断言(方法)。这样,如果断言失败,则无论如何都会运行其他测试。

所以你的榜样应该是:

[Test]
public void ThreeShouldEqualFive(){
    Assert.AreEqual(3,5);
}

[Test]
public void ThreeShouldEqualFour(){
    Assert.AreEqual(3,4);
}

无论如何,这是编写测试的推荐方法(尽管在所有情况下都不可能在每次测试中保持一个断言。)