我想让我的TearDown方法在应用某些逻辑之前检查先前的测试是否成功。有一个简单的方法吗?
答案 0 :(得分:31)
这已经在Ran's answer解决了类似的问题。 Quoting Ran:
从版本2.5.7开始,NUnit允许Teardown检测上次测试是否失败。 新的TestContext类允许测试访问有关自身的信息,包括TestStauts。
有关详细信息,请参阅http://nunit.org/?p=releaseNotes&r=2.5.7
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Status == TestStatus.Failed)
{
PerformCleanUpFromTest();
}
}
答案 1 :(得分:6)
如果您想使用TearDown检测NUnit 3.5上次测试的状态,那么应该是:
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed)
{
//your code
}
}
答案 2 :(得分:2)
听起来像一个危险的想法,除非它是一个集成测试,说删除数据说。为什么不在测试中做呢?
显然,可以设置班级中的私人标志。
如果你必须<{3}},Charlie Poole has suggested这就是
答案 3 :(得分:1)
仅在手动执行此操作时。实际上你甚至不知道打算运行哪些测试。在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。你也可以在测试中使用稍微不同的逻辑把它放在try catch finally块中:
[Test]
void Test1()
{
test1State = TestStateEnum.SUCCEDED; // On the beginning of your test
try
{
... // Your Test
}
catch( Exception )
{
test1State = TestStateEnum.FAILED;
throw; // Rethrows the Exception
}
}
答案 4 :(得分:0)
[OneTimeTearDown]
public void AfterEachTest()
{
if (TestContext.CurrentContext.Result.Outcome.Status.Equals(TestStatus.Failed))
{
Console.WriteLine("FAILS");
}
else if (TestContext.CurrentContext.Result.Outcome.Equals(ResultState.Success))
{
Console.WriteLine("SUCESS");
}
}
答案 5 :(得分:-1)
恕我直言拆除逻辑应独立于测试结果。
理想情况下,你应该完全避免使用设置和拆解,al xunit.net。有关详细信息,请参阅here。