C# 如何在每次NUnit测试后运行方法(即使在拆卸过程中失败)
我正在使用NUnit开发一个测试库,并在测试运行时生成一个自定义报告 在测试的C# 如何在每次NUnit测试后运行方法(即使在拆卸过程中失败),c#,testing,nunit,nunit-3.0,teardown,C#,Testing,Nunit,Nunit 3.0,Teardown,我正在使用NUnit开发一个测试库,并在测试运行时生成一个自定义报告 在测试的TearDown中,我调用了一个报告测试结果的方法。如果测试通过,它就可以正常工作,但是如果测试失败、被忽略或没有结论,它就永远无法实现 为了使事情变得更加困难,拆卸中的“//do stuff”也会导致测试失败,在这种情况下,仍然需要记录测试。但是,Assert抛出一个异常,这意味着它离开块,永远不会到达报告代码 [SetUp] public void ExampleSetup() { //whatever }
TearDown
中,我调用了一个报告测试结果的方法。如果测试通过,它就可以正常工作,但是如果测试失败、被忽略或没有结论,它就永远无法实现
为了使事情变得更加困难,拆卸中的“//do stuff”也会导致测试失败,在这种情况下,仍然需要记录测试。但是,Assert
抛出一个异常,这意味着它离开块,永远不会到达报告代码
[SetUp]
public void ExampleSetup()
{
//whatever
}
[Test]
public void ExampleTest()
{
//whatever
}
[TearDown]
public void ExampleTearDown()
{
//do stuff
someObject.ReportTestResult();
}
更多信息
-使用NUnit 3.2.0通过查找的章节,我们可以看到您需要使用
操作属性扩展点是:
旨在通过创建
属性,这些属性封装了在或之前要执行的特定操作
在测试运行之后
此扩展点的基本实现摘要
您需要在给定的sayFooBarActionAttribute()
类中实现ITestAction
接口
鉴于此,您实现了BeforeTest()
、postertest()
和目标
属性
对于基本场景,您需要使用上述两种方法执行自定义操作
您需要做的最后一件事是使用此属性,例如:
[Test][FooBarActionAttribute()]
public void Should_Baz_a_FooBar() {
...
}
这将在测试方法运行前后执行
有关更高级的技术,请参阅链接文档,它非常简单。坦率地说,这只是一个坏主意。拆卸是测试的一部分。这就是它可能失败的原因。(但请注意,NUnit将拆卸中的断言失败视为错误而不是失败) 因为测试可以做任何事情——好的或坏的,对的或错的——所以将您的日志记录到测试代码中是不可靠的。您应该登录运行测试的代码,而不是测试本身。如上所述,拆卸是测试的一部分。正如另一个答案中所建议的,您可以定义的任何ActionAttribute也是如此。不要在那里做日志记录 不幸的是,有在测试中进行日志记录的历史,因为NUnit要么没有提供替代方案——至少没有一个易于使用的方案。对于NUnit V2,您可以创建一个测试事件侦听器加载项来实现此目的。如果你使用的是NUnit的版本,你仍然可以 对于NUnit 3.0及更高版本,您应该创建一个可与TestEngine一起使用的侦听器扩展。TestEngine及其扩展完全独立于您的测试。一旦您有了一个经过良好测试的扩展,您将能够在所有测试中使用它,并且测试不会被日志代码弄乱