C# 非阻塞断言对应项

C# 非阻塞断言对应项,c#,unit-testing,C#,Unit Testing,Assert的非阻塞对应项是什么,当前的方法如AreEqual(失败时)抛出异常并保持 我想用报表运行所有测试,而不需要用户进行任何交互 更新,小例子: Assert.AreEqual(3,5); Assert.AreEqual(3,5); 只有第一个将被执行,异常将被抛出。我希望没有例外,没有交互,只有一份报告说明两个失败 断言的非阻塞对应项是什么 没有一个断言,因为通常知道在第一个断言之后哪些其他断言失败没有多大用处。然而,如果你真的想做的话,你可以做一些事情来捏造它 一个想法是使用日志框

Assert
的非阻塞对应项是什么,当前的方法如
AreEqual
(失败时)抛出异常并保持

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

更新,小例子:

Assert.AreEqual(3,5);
Assert.AreEqual(3,5);
只有第一个将被执行,异常将被抛出。我希望没有例外,没有交互,只有一份报告说明两个失败

断言的非阻塞对应项是什么

没有一个断言,因为通常知道在第一个断言之后哪些其他断言失败没有多大用处。然而,如果你真的想做的话,你可以做一些事情来捏造它

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

_assertLogger.LogErrorIf(a.ID == 0, "a's ID was not set");
另一种方法是将断言封装在一个捕获结果的方法中,然后从断言生成的异常集合中生成一个
aggregateeexception

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

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

所以你的例子应该是:

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

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

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

理想情况下,每个方法应该只有一个测试,因此在第一个断言上返回“测试失败”结果通常是“标准实践”。。。你能举一个例子说明你想做什么吗?我理解得对吗?你基本上是要求测试在遇到错误情况后继续运行,并继续聚合之后遇到的所有错误?@lc。我想运行所有的单元测试,目前我可以运行测试,直到出现错误。如果以前有什么东西被破坏了,为什么您希望测试的其余部分“成功”?听起来你做错了什么。你所有的测试都在一个单一的(单元测试)方法中吗?@greenoldman:这里有一个语义上的差异会引起混乱。大多数人在每个“单元测试”中编写一个单元测试方法,所以当你说你希望其余的测试运行时,你实际上是说你希望其余的断言运行。谢谢你+1。我会把它打开一段时间,也许其他人会添加更多的输入。一个澄清是,Assert抛出异常,而不是我,所以我没有产生任何异常(我的意思是直接产生的)。@greenoldman:很可能在失败的情况下,你会毫无意义地产生异常。例如,在上面的最后一个代码示例中,如果第一个断言失败,那么在调用Assert方法之前,下一行将出现null引用异常。我认为这就是为什么大多数人认为在某个方面失败后继续运行测试没有好处的原因。好的,我复制了这个,仍然VS停止在轨道中,向我显示异常框。你使用什么VS?我——2010年。