【问题标题】:NUnit Testing: Failing to properly instantiate the test suite due to SetUp attributesNUnit 测试:由于设置属性而无法正确实例化测试套件
【发布时间】:2016-05-11 11:14:16
【问题描述】:

早上好,

作为上下文,我正在使用 nUnit 3.0.1(使用 Selenium)在自动化测试套件中工作。测试直接从 Visual Studio 2013 的测试资源管理器运行。

我的问题是:在开始运行测试套件时,我试图自动设置一些设置功能。对于所有测试套件,这些事情只需要执行一次,因此我不打算为每个测试类使用 [SetUp] 属性。

但是,当我运行测试时,我的设置甚至没有被触及 :(。调试确认设置没有完成。

到目前为止,我已尝试使用:[SetUpFixture] 以及 [OneTimeSetUp] 或 [SetUp](多种组合),还尝试删除命名空间。我仍然没有得到我需要的东西。

我是 nUnit 的新手,所以我想要一些关于可能出现问题的指导,或者一些确保脚本设置运行的替代方法。

【问题讨论】:

  • 您所描述的内容在概念上听起来是正确的,您可以发布您的代码以便我们看看有什么问题吗?
  • 正如克里斯所说,[SetupFixture] 和 [OneTimeSetup] 是正确的。您使用哪个单元测试运行器来运行测试?并非所有测试运行程序都已更新为支持 NUnit 3。

标签: c# visual-studio unit-testing selenium nunit


【解决方案1】:

我希望你遵循这个模式:

在下面的MySetupClass 中定义了测试套件设置和拆卸方法,它们仅在测试运行的开始和结束时执行一次。 参考SetupFixture documentation

MySetupClass.cs

namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [SetUpFixture]
  public class MySetUpClass
  {
    [OneTimeSetUp]
    public void RunBeforeAnyTests()
    {
      Console.WriteLine("SetupFixture - OneTimeSetup");
    }

    [OneTimeTearDown]
    public void RunAfterAllTests()
    {
      Console.WriteLine("Suite TearDown - OneTimeTearDown");
    }
  }
}

在下面的SuccessTests.csSetupTearDown 在每个测试之前和之后执行,因为这些方法是在一个标有TestFixture 属性的类中定义的。 OneTimeSetup & OneTimeTearDown 属性定义测试用例中的方法,在类中所有测试方法之前和之后执行一次。

请参阅 [此处][2] 设置属性的文档。

SuccessTests.cs

namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [TestFixture]
  public class SuccessTests
  {
    [SetUp] 
    public void SetUp()
    {  Console.WriteLine("Test Setup"); }

    [TearDown]
    public void TearDown()
    {  Console.WriteLine("Test Teardown"); }


    [OneTimeSetup]
    public void OneTimeSetup()
    {  Console.WriteLine("Test Fixture - OneTimeSetup"); }

    [OneTimeTearDown]
    public void OneTimeTearDown()
    {  Console.WriteLine("Test Fixture - OneTimeTearDown"); }

    [Test]
    public void Test1()
    {  Console.WriteLine("Actual Test1"); }

    [Test]
    public void Test2()
    {  Console.WriteLine("Actual Test2"); }

  }
}

运行上述测试会得到这个结果。

Suite Setup - OneTimeSetup
Test Fixture - OneTimeSetup
Test Setup
Actual Test1
Test Teardown
Test Setup
Actual Test2
Test Teardown
Test Fixture TearDown - OneTimeTearDown
Suite TearDown - OneTimeTearDown

【讨论】:

  • 此示例适用于 nunit v2,而 OP 询问了 v3。他应该在 SetUpFixture 中将 SetUp 和 TearDown 更改为 OneTimeSetUp 和 OneTimeTearDown。 TestFixtureSetUp 和 TestFixtureTearDown 已弃用,取而代之的是 OneTime 等效项。
  • @Charlie,感谢您指点 v2。我将使用 v3 相关属性更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 2017-08-13
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
相关资源
最近更新 更多