Nunit 努尼特:我如何在[拆卸]中确定实际的[测试]是否成功?

Nunit 努尼特:我如何在[拆卸]中确定实际的[测试]是否成功?,nunit,Nunit,如何在[TearDown]中确定实际的[Test]是否成功使用NUnit 如果特定的[Test]未成功,我想让(Selenium Driven)Chrome浏览器窗口在[TearDown]中保持打开状态。如果成功,可以关闭窗口 提前Thx。这并不是一种特别优雅的方法来实现这一点,但是通过使用和每次测试通过时增加一个计数器,您就可以在拆卸时比较结果 免责声明:请注意,这仅在夹具中的所有测试都运行时有效(因为所有Tests都是计数的-例如,在单个Test案例中使用R#Test runner将失败惨重

如何在
[TearDown]
中确定实际的
[Test]
是否成功使用
NUnit

如果特定的
[Test]
未成功,我想让(Selenium Driven)Chrome浏览器窗口在
[TearDown]
中保持打开状态。如果成功,可以关闭窗口


提前Thx。

这并不是一种特别优雅的方法来实现这一点,但是通过使用和每次测试通过时增加一个计数器,您就可以在拆卸时比较结果

免责声明:请注意,这仅在夹具中的所有测试都运行时有效(因为所有
Test
s都是计数的-例如,在单个
Test
案例中使用R#Test runner将失败惨重)。如果在夹具中有
忽略
d一个或多个测试,它也会失败,因为计数将被忽略

[TestFixture]
public class UnitTest1
{
    private static int testsPassed = 0;

    [TearDown]
    public void TearDown()
    {
         // use reflection to find all tests in this fixture
        var totalTests = GetType()
            .GetMethods()
            .Count(method => method.GetCustomAttributes(
               typeof (TestAttribute), false).Count() > 0);

        if (testsPassed == totalTests)
        {
            // All good - can close the driver
            // seleniumDriver.Quit()
        }
    }

    [Test]
    public void FailedMethod()
    {
        Assert.AreEqual(1,2);
        Interlocked.Increment(ref testsPassed);
    }

    [Test]
    public void PassMethod()
    {
        Assert.AreEqual(1, 1);
        Interlocked.Increment(ref testsPassed);
    }
}

一个选择是写一篇文章。这样,您就可以得到测试失败或成功的通知,并增加一些计数器。

Thx以获取答案。我认为[拆卸]将在所有测试后运行多次。。。我想检测特定测试是否成功。如果您只想检查单个
[test]
,则只需设置一个bool
issusccessful
,并以上述相同方式进行设置和检测?是的,是的。我的想法更简单。我在找一些内置的设备,但不知道为什么,这会阻塞我的大脑。ThxI猜想阻碍更优雅解决方案的问题是TestRunner保留了测试的整体状态-不同的测试运行程序(NUnit、R#、NUnitConsole等)可能有不同的实现,并且在任何情况下以这种方式将TestFixture耦合回运行程序都是不寻常的。