NUnit:记录测试步骤并断言测试失败或错误的描述

时间:2017-07-19 01:35:04

标签: unit-testing nunit nunit-3.0

在测试失败时,Nunit将仅显示评估的预期和实际条件。如果您有多个断言,则无法判断哪个Assert失败

Expected: True
But was: False

异常上的相同问题:存在堆栈跟踪,但它没有描述性,并且没有告诉我错误发生之前发生的步骤的任何细节。

一种方法是将消息传递给Assert或添加日志语句(例如使用TestContext.WriteLine)。但这意味着每次写一个断言我都需要写一个唯一的消息,或者每一步我都要添加一个日志语句,这很费时,在更新测试时需要额外的维护。

通过按原样包含方法调用和断言代码语句,是否有更简单的方法来显示此信息?

例如,像这样:

Expected: True
But was: False

On: Assert.That(User.HasOrderInvoice, Is.True)

Steps:
   User.LoginToAccount(UserAccData.TestUserAcc)
   User.AddProductToCart(Data.TestProdData)
   User.PurchaseCart()
   User.GoToOrderHistory()

1 个答案:

答案 0 :(得分:0)

这里的一个解决方案是让您的测试更加明确。 NUnit有各种各样的约束条件可以帮助你做到这一点 - 并且可以获得更多有用的失败信息。

例如,我会将您的上述断言写为:

A.B.flood.subset <- A.B.flood %>% select(which(!colSums(A.B.flood, na.rm=TRUE) %in% 0))

这会给出类似的失败消息:

Assert.That(User, Has.Property(nameof(User.HasOrderInvoice)).True)

我发现这涵盖了我感兴趣的大多数情况。对于任何无法明确表达的情况,您可以在Expected: Has property 'HasOrderInvoice' equal to true But was: False 中添加说明,如下所示:

Assert.That()

这会给你一个类似的信息:

Assert.That(User.HasOrderInvoice, Is.True, "Test User Has Order Invoice")