防止NUnit测试根据环境运行

时间:2016-04-20 09:57:55

标签: c# unit-testing selenium nunit

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

我需要阻止这个'Write'测试在localhost上的任何其他环境上运行。到目前为止,我尝试使用方法属性并在运行时获取测试方法名称然后工作,但这不是很有效。你们能指点一个好的解决方案吗?谢谢!

2 个答案:

答案 0 :(得分:2)

我会将测试标记为使用特定类别名称排除,然后定义一个SetUp函数,如果使用该名称标记测试,并且如果您处于特定环境(如Production),则会阻止测试运行。将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 :(得分:0)

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