防止 NUnit 测试根据环境运行

问题描述 投票:0回答:2

我已经在这个问题上挣扎了很长一段时间了。一些背景:我使用 Selenium 创建了我的自动化测试框架。第一个项目是纯 NUnit 测试,第二个项目完成测试的所有工作。现在,在测试项目中,我将目录保存到运行测试的所有环境中。到目前为止,我的许多测试都是只读的,并且不太关心测试是否没有在它们应该运行的环境中运行。当我开始运行一些“写入”测试时,这种情况发生了变化。

我需要阻止此“写入”测试在本地主机以外的任何其他环境上运行。到目前为止,我尝试使用方法属性并在运行时获取测试方法名称,然后进行工作,但这不是很有效。你们能给我指点一个好的解决方案吗?谢谢!

c# unit-testing selenium nunit
2个回答
3
投票

我会使用特定类别名称标记要排除的测试,然后定义一个 SetUp 函数,如果测试被标记为该名称并且您处于特定环境(例如生产),则该函数将停止运行测试。将 SetUp 函数放在 BaseClass 中,并让所有测试装置继承它。 SetUp 函数将在每次测试之前运行,并在需要时阻止其运行。

类似这样的:

public class BaseSetup
{
    protected const string CategoryToExclude = "Write";

    [SetUp]
    public void Init()
    {  
        string env =  ConfigurationManager.GetEnvironment();
        if ( env == Constants.Environments.PROD && (TestContext.CurrentContext.Test.Properties["Categories"].Contains(CategoryToExclude)))
        {
            Assert.Inconclusive(String.Format("Cannot run this test on environment: {0}", env));
        }
    }
}

[TestFixture]
public class UnitTests : BaseSetup
{
    [Test]
    [Category(CategoryToExclude)]
    public void TestMethod1()
    {
        Console.WriteLine("TestMethod1");
    }

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

希望这有帮助!


1
投票

NUnit 有 category 属性。 您可以按类别对测试进行分组并仅运行所需的类别。

© www.soinside.com 2019 - 2024. All rights reserved.