【问题标题】:Make all tests run multiple times with different environment setup使用不同的环境设置使所有测试多次运行
【发布时间】:2016-02-01 09:41:34
【问题描述】:

所有测试在我的系统中创建相同的“根对象”,并且“根对象”有多种模式。我需要每个测试来检查每种模式的所有内容。所以我决定在“根对象”中创建一个内部静态属性,我可以在其中覆盖创建时使用的模式。

现在测试行为取决于环境设置。我有大量的测试,我无法修改它们中的每一个来针对每种可能的模式测试相同的东西。

相反,我想在一个地方设置模式。

当我在 R# 中点击“运行所有测试”时,我希望所有测试针对每个静态设置模式运行一次。

可以吗?

【问题讨论】:

  • 我想你应该可以用这个来解决它:stackoverflow.com/questions/11667868/…
  • @gregkalapos 我不能为每个测试指定不同的测试用例。我有太多的测试。我需要“全局范围”的测试用例。

标签: c# unit-testing testing nunit


【解决方案1】:

您可以在 NUnit 中执行此操作,方法是在测试定义的命名空间层次结构的所需级别创建 SetUpFixture。该夹具的 OneTimeSetUp 方法准备环境,并且 OneTimeTearDowm 方法在必要时清理它。如果您想为整个程序集执行此操作,只需在任何命名空间之外使用 SetUpFixtureAttribute 定义类。

[SetUpFixture]
public static class MySetUpFixture
{
    [OneTimeSetUp]
    public static void SetUpTestEnvironment()
    {
        // Set up the environment, possibly leaving information
        // for the tests to use in static fields or properties.
    }

    [OneTimeTearDown]
    public static void CleanUpEnvironment()
    {
        // If any cleanup is needed, do it here
    }
}

类和方法不必是静态的,但使用静态会让您记住这样一个事实:SetUpFixture 实例和 TestFixture 实例之间没有通信。

您的测试可以简单地使用由 SetUpFixture 创建的环境,也可以查询类的静态属性以更改其行为。

【讨论】:

  • 1. SetUpFixture 中的 [SetUp]OneTimeSetUp 有什么区别?据我了解,两者都在其命名空间中包含的任何测试之前执行一次。
  • 2.这将只允许设置一种配置,但我还需要在其他配置中运行我的测试。
  • 这取决于您使用的是 NUnit V2 还是 V3。 OneTimeSetUp 是 V3 中使用的属性。
  • 我对多个设置的假设是,它们将在 NUnit 的多次运行中完成,并且 SetUpFixture 将根据环境变量、文件等确定要设置的环境。
  • 你给了我一个功能想法——参数化 SetUpFixtures!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多