如何在测试拆卸时使用 NUnit 3 读取 ITestResult

How to read ITestResult with NUnit 3 at test teardown

我正在尝试使用内部 ITestResult 接口在 NUnit 3 中获取测试结果。但是,当我将 ITestResult 对象传递给拆卸方法时,我得到 "OneTimeSetup: Invalid signature for SetUp or TearDown method: TestFinished",其中 TestFinished 被列为我的拆卸方法。

如果我没有通过对象,测试就可以正常进行。我试图将我的 [TearDown] 方法移动到包含测试的实际 class 而不是我的基础 class 但导致相同的错误。我想在每次测试完成后使用我的 TestFinish 函数 运行,这样我就可以根据 pass/fail 或异常消息中的内容采取相应的行动,而不是将我的测试 try/catch 与操作结构一起使用 I现在有了。

下面是我的代码结构:

----一个文件开始和结束测试并创建一个webdriver对象来使用---

    [OneTimeSetUp]
    public void Setup()
    {
     //Do some webdriver setup...
    }

----用于设置或拆除测试的基础测试Class----

[TestFixture]
public class BaseTestClass
{   
    //Also use the webdriver object created at [OneTimeSetUp]
    protected void TestRunner(Action action)
    {
        //perform the incoming tests.
        try
        {
            action();
        }

        //if the test errors out, log it to the file.
        catch (Exception e)
        {
          //Do some logging...
        }
    }

    [TearDown]
    public void TestFinished(ITestResult i)
    {
        //Handle the result of a test using ITestResult object
    }
}

----使用BaseTest的测试文件Class----

class AccountConfirmation : BaseTestClass
{

    [Test]
    public void VerifyAccountData() {

        TestRunner(() => {
           //Do a test...
        });

    }
}

从您的 TearDown 方法中删除 ITestResult 并在方法中使用 TestContext.CurrentContext.Result

例如,

[Test]
public void TestMethod()
{
    Assert.Fail("This test failed");
}

[TearDown]
public void TearDown()
{
    TestContext.WriteLine(TestContext.CurrentContext.Result.Message);
}

会输出,

=> NUnitFixtureSetup.TestClass.TestMethod
This test failed