【问题标题】:Prevent NUnit tests to run depending on environment防止 NUnit 测试根据环境运行
【发布时间】:2016-08-12 22:04:49
【问题描述】:

我已经为此苦苦挣扎了很长时间。一些背景知识:我使用 Selenium 创建了我的自动化测试框架。一个项目是纯 NUnit 测试,第二个项目负责测试的所有工作。现在,在测试项目中,我将目录保存到我运行测试的所有环境中。到目前为止,我的许多测试都是只读的,如果测试没有在他们应该运行的环境中运行,我并没有太在意。当我开始运行一些“写”测试时,这种情况发生了变化。

我需要阻止此“写入”测试在除 localhost 之外的任何其他环境中运行。到目前为止,我尝试使用方法属性并在运行时获取测试方法名称然后开始工作,但这不是很有效。各位大神能给我一个好的解决办法吗?谢谢!

【问题讨论】:

    标签: c# unit-testing selenium nunit


    【解决方案1】:

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

    【讨论】:

    • 我想我以前看过这个属性,但是,这会将测试分组到一个类别,但如果我忘记更改指向 QA 环境的 URL(在 app.config 中),它会仍然运行这个测试。但我可能错了……
    • @Jakubee 您正在为任何环境配置单独的测试配置,并且每个配置都包含一组选定的测试。如果您不更改 app.config,则不会发生任何事情,因为这组测试没有执行。
    【解决方案2】:

    我将使用特定类别名称标记要排除的测试,然后定义一个 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");  
            }
        }
    

    希望这会有所帮助!

    【讨论】:

    • 您的答案与我最终得到的答案几乎相同。我会投票赞成,因为这是更详细和正确的答案。谢谢!!
    • 感谢@Jakubee 我的第一次支持!我还想提一下,TestContext.CurrentContext.Test.Properties["Categories"] 并不适用于所有版本的 NUnit,因为他们仍在试验它......在这种情况下,我可能会加上使用类别进行测试,然后使用 TestContext.CurrentContext.Test.Name.Contains(CategoryToExclude)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多