gpt4 book ai didi

nunit - 为什么 Nunit3 OneTimeSetUp() 在 [Test] 之后而不是之前被调用

转载 作者:行者123 更新时间:2023-12-02 15:10:44 26 4
gpt4 key购买 nike

我的单元测试是用 Nunit 2.6 编写的,但计划升级到 Nunit 3.6.1,但是我注意到 Nunit 3.6.1 有一个奇怪的问题(或者可能是我没有正确理解)。问题出在 OneTimeSetUp() 周围。

在 Nunit 2.6.3 中,我有 SetUpFixtureAttribute [SetUpFixture] 并且在 SetUpAttribute [SetUp] 中,它按我的预期工作,流程是

SetUpFixture.Setup

测试夹具.设置

测试夹具.测试

TestFixture.TearDown

测试夹具.设置

测试夹具.测试

TestFixture.TearDown

SetUpFixture.TearDown

当我升级到 Nunit 3 时,我将 SetUpFixture 中的 SetUp() 替换为 OneTimeSetUp,在运行我的代码后,我得到了以下流程

测试夹具.设置

测试夹具.测试

TestFixture.TearDown

SetUpFixture.OneTimeSetUp

SetUpFixture.OneTimeTearDown

以下是我在我的机器上试过的示例代码以及命令行输出

   [SetUpFixture]
public class TestBase
{
[OneTimeSetUp]
//[SetUp]
public static void MyTestSetup()
{
Console.WriteLine(" ---------- Calling OneTimeSetUp ----------");

}
}


[TestFixture]
class TestClass : TestBase
{
[Test]
public void test()
{
Console.WriteLine("\n ....I'm inside TestClass.test() ....");
}

}

控制台输出

=> TestSample.TestClass.test

....I'm inside TestClass.test() ....
=> TestSample.TestClass
---------- Calling OneTimeSetUp ----------
=> TestSpecflow.TestBase
---------- Calling OneTimeSetUp ----------

有人可以建议我在这里缺少什么吗?我正在通过 nunit-console 运行测试

最佳答案

问题在于输出具有误导性,并且与代码执行的顺序不符。因为 NUnit 3 支持并行执行,所以它会捕获输出并在该级别的测试执行完成时将其显示在控制台上。

在您的例子中,fixture 设置包装了测试,因此它在测试后完成执行并随后输出捕获的文本。

如果您调试测试,或将 Console.WriteLine 调用切换为立即输出的 TestContext.Progress.WriteLine,您将看到代码在您期望的顺序。

如果它不是您期望的顺序,请查看命名空间。请记住,[SetupFixture] 用于在 namespace 级别进行设置。如果您的测试在不同的命名空间中,它们可能会以不同的顺序调用。如果您想为所有测试设置一个设置,请将类放在顶级命名空间中,或者如果您有多个命名空间,则不放在任何命名空间中。

这是一些测试代码,

namespace NUnitFixtureSetup
{
[SetUpFixture]
public class SetupClass
{
[OneTimeSetUp]
public void MyTestSetup()
{
TestContext.Progress.WriteLine("One time setup");
}
}

[TestFixture]
public class TestClass
{
[Test]
public void TestMethod()
{
TestContext.Progress.WriteLine("Test Method");
}
}
}

这是使用 nunit3-console.exe 运行的输出

=> NUnitFixtureSetup.SetupClass
One time setup
=> NUnitFixtureSetup.TestClass.TestMethod
Test Method

关于nunit - 为什么 Nunit3 OneTimeSetUp() 在 [Test] 之后而不是之前被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44030447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com