- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的单元测试是用 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/
可以使用 enable 在 nunit 开发的项目中,使用在 OneTimeSetup 中初始化的字段,但没有获取“警告 CS8618:不可为 null 的字段‘...’在退出构造函数时必须包含非 n
我正在使用 NUnit 运行一些 Selenium 测试,我遇到了一个小问题,我想看看是否可以得到更正。发生的情况是 [OneTimeSetUp] 和 [OneTimeTearDown] 在每个 fi
在 NUnit 3 中,他们用“OneTimeSetUp”替换了属性“TestFixtureSetUp”。然而,它实际上似乎不起作用,除非我是一个十足的白痴。 这是我的代码: [TestFixture
我们有一个集成测试套件,其中包含大量执行存储库类的测试。 目标是在 BaseTestFixture 中有一个 [OneTimeSetup] 方法,它将在所有测试之前和所有测试之后的拆卸中仅创建/填充每
我在与 Razor 应用程序结合MVVM进行集成测试时遇到问题。我所有的类都使用ApplicationDbContext。 测试类: [TestFixture] public class ApiPar
我目前正在使用 C#、nunit 和 Selenium 构建一个自动化项目,我正在尝试拥有一个安装类,它将在任何 TestFixture 之前初始化 selenium webdriver将运行并且在所
OneTimeSetUp 和 OneTimeTearDown 停止工作 using NUnit.Framework; using System; using System.Collections.Ge
我的单元测试是用 Nunit 2.6 编写的,但计划升级到 Nunit 3.6.1,但是我注意到 Nunit 3.6.1 有一个奇怪的问题(或者可能是我没有正确理解)。问题出在 OneTimeSetU
我的单元测试是用 Nunit 2.6 编写的,但计划升级到 Nunit 3.6.1,但是我注意到 Nunit 3.6.1 有一个奇怪的问题(或者可能是我没有正确理解)。问题出在 OneTimeSetU
我遇到一个问题,NUnit 告诉我:“找不到合适的构造函数”。是什么原因造成的?我还收到另一条消息:“Exception doesn't have a stacktrace”。这两条消息只是一遍又一遍
我在 Nunit 3 测试用例中陷入了奇怪的情况,我在 [SetUpFixture] 中的 [OneTimeSetUp] 在 [Test, TestCaseSource(typeof(TestData
我是一名优秀的程序员,十分优秀!