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

时间:2017-05-17 16:31:43

标签: c# selenium nunit nunit-3.0

我试图在使用内部ITestResult界面拆除时在NUnit 3中获取测试结果。但是,当我将ITestResult对象传递给拆卸方法时,我得到“OneTimeSetup:SetUp或TearDown方法的无效签名:TestFinished”,其中TestFinished被列为我的拆解方法。

如果我没有通过该对象,测试工作正常。我试图将我的[TearDown]方法移动到包含测试的实际类而不是我的基类,但导致相同的错误。我希望我的TestFinish函数在每个测试完成时运行,因此我可以根据通过/失败或异常消息中的内容采取相应的行动,而不是使用我现在的测试try / catch和动作结构。

以下是我的代码结构:

----启动和结束测试并创建要使用的webdriver对象的文件---

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

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

[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
    }
}

----使用BaseTestClass的测试文件----

class AccountConfirmation : BaseTestClass
{

    [Test]
    public void VerifyAccountData() {

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

    }
}

1 个答案:

答案 0 :(得分:1)

ITestResult方法中移除TearDown,然后在方法中使用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