继续断言

断言后有什么方法可以继续测试吗? ..我需要查看断言导致的所有情况。

foreach (var ex in data) { Assert.AreEqual(ex1, ex, msg); } 

不,你不能 – 如果失败, Assert将抛出一个exception,你不能继续在exception之后继续。 您可以捕获exception,然后将它们添加到集合中……但它并不是非常好。

如果您尝试基本测试几种不同的情况,大多数现代unit testing框架都有参数化测试的方法,以便每个案例最终作为单独的测试,并单独报告通过/失败标准。 我们不知道你正在使用哪个框架或者不同的案例在这里,但如果你能提供更多的背景,我们可以尝试帮助更多…

Assert.AreEqual抛出断言exception。 所以,你不能简单地转向下一个断言。 你应该抓住它们,但这不是应该如何使用断言。 失败的断言应该停止测试执行。

因此,您应该有单个断言,它将为您返回所有必需的数据。 如果要validation所有项目是否等于某个值,那么您应该在test中编写它。 如果测试失败,您可以将所有集合转储到错误消息或只是不期望的项目(我使用Json.NET ):

 Assert.IsTrue(data.All(ex => ex == ex1), JsonConvert.SerializeObject(data.Where(ex => ex != ex1))); 

如果失败,此断言将所有项目序列化为JSON并在测试运行器消息中显示它们。 例如,如果你有整数集合:

 var data = new List { 1, 1, 5, 1, 2 }; int expected = 1; Assert.IsTrue(data.All(i => i == expected), "Unexpected items: " + JsonConvert.SerializeObject(data.Where(i => i != expected))); 

测试将失败并显示消息:

Assert.IsTrue失败。 意外的项目:[5,2]

您可以捕获exception,将其添加到列表中,然后继续。 最后,您可以断言列表为空。

那篇文章解释了如何“validation”你的价值。 将validation添加到MsTest