我想让我的TearDown方法在应用某些逻辑之前检查先前的测试是否成功。是否有捷径可寻?NUnit - 是否可以在TearDown中检查测试是否成功?
回答
只有当你手动执行此操作。事实上,你甚至不知道哪些测试打算运行。在NUnit IDE中,可以启用一些测试并禁用其他一些测试。如果你想知道一些具体的测试已经用完,您可以包括这样的代码在你的测试类:
enum TestStateEnum { DISABLED, FAILED, SUCCEDED };
TestStateEnum test1State = TestStateEnum.DISABLED;
[Test]
void Test1()
{
test1State = TestStateEnum.FAILED; // On the beginning of your test
...
test1State = TestStateEnum.SUCCEDED; // On the End of your Test
}
然后你可以检查test1State变量。如果测试引发异常,则不会设置SUCCEDED。你也可以把它放进一个尝试捕捉终于在您的测试块以稍微不同的逻辑:
[Test]
void Test1()
{
test1State = TestStateEnum.SUCCEDED; // On the beginning of your test
try
{
... // Your Test
}
catch(Exception)
{
test1State = TestStateEnum.FAILED;
throw; // Rethrows the Exception
}
}
它不是试图告诉哪个测试运行,只是我想抛出一个不同的错误,所以我可以得到更准确的堆栈跟踪 – 2009-09-24 19:11:04
恕我直言推倒逻辑应该是独立的测试结果。
理想情况下,你应该避免完全使用setup和teardown,al xunit.net。有关更多信息,请参阅here。
通常,绝对那是你应该做的。不过,我喜欢让自己的测试保持干净和内聚的BDD风格。有时候这意味着通过lambdas设置givens和assert并在TearDown中执行它们。问题是,如果由于某种原因安装程序或测试机构失败,堆栈跟踪令人困惑。 – 2009-09-24 19:09:32
对于类似的SO问题,这已经在Ran's answer中解决了。引用Ran:
从版本2.5.7开始,NUnit允许Teardown检测最后一次测试是否失败。 新的TestContext类允许测试访问关于它们自己的信息,包括TestStauts。
有关详细信息,请如果你想使用TearDown中检测与NUnit的3.5最后一次测试的状态是指http://nunit.org/?p=releaseNotes&r=2.5.7
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Status == TestStatus.Failed)
{
PerformCleanUpFromTest();
}
}
感谢您的链接。请注意,这个问题在David回答之前的一年半内发布。 – 2013-05-06 20:00:22
在Nunit 3.x中它是'if(TestContext.CurrentContext.Result.Outcome == ResultState.Failure)' – Lukas 2016-07-11 15:44:18
它应该是:
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Outcome.Status.Equals(TestStatus.Failed))
{
//your code
}
}
- 1. 如何检查Google Test TearDown()中的测试是否失败?
- 2. 是否可以检测Update_all是否成功?
- 3. 单元测试setUp/tearDown是否在异步测试中工作?
- 4. 是否可以在Gallio中运行NUnit 2.5.3测试?
- 5. 检查是否sendsynchronousrequest成功
- 6. 检查EndExecuteNonQuery是否成功
- 7. qtreeview测试是否可检查项目
- 8. 检查回文是否可以形成
- 9. 测试以查看导航属性是否可以检索值
- 10. 是否可以有效检查STL std :: deque擦除是否成功?
- 11. 是否可以检查是否完成按钮被按下
- 12. 是否可以从主要方法运行NUnit测试
- 13. 是否可以参数化一个nunit测试
- 14. 如何在NUnit TearDown上知道测试是否抛出异常以及该异常是什么?
- 15. 执行检查Perl测试是否(并且只有)测试用例成功
- 16. 检查发送邮件是否成功/不成功在CakePHP中?
- 17. NUnit:是否可以配置NUnit测试失败,如果没有Assert执行
- 18. 你可以测试mixin是否存在?
- 19. 是否可以检测蜂窝网络是否可用?
- 20. 检查更新是否成功
- 21. 检查INSERT INTO语句是否成功
- 22. 检查贝宝付款是否成功
- 23. 如何检查mysqli_connect是否成功?
- 24. 检查两个antcalls是否成功
- 25. 检查http状态是否成功
- 26. 检查XXTEA是否解密成功
- 27. 如何检查WinActivate是否成功?
- 28. 检查exec()是否成功运行
- 29. 检查SQL INSERT是否成功
- 30. 检查php mysql更新是否成功
那是令人沮丧的,我会期望某种NUnit.CurrentTestContext API。我只需要知道测试是否成功,因为如果测试失败,我可以提供更多信息来帮助进行调试。 – 2009-09-24 19:14:49