我现在很长一段时间都在努力解决这个问题。一些背景:我使用Selenium创建了自动化测试框架。一个项目是纯NUnit测试,第二个项目完成测试的所有工作。现在,在测试项目中,我将目录保存到我运行测试的所有环境中。到目前为止,我的许多测试都是只读的,并没有太多关于测试是否在他们应该的环境上运行的问题。当我开始运行一些“写入”测试时,这已经改变了。
我需要阻止这个'Write'测试在localhost上的任何其他环境上运行。到目前为止,我尝试使用方法属性并在运行时获取测试方法名称然后工作,但这不是很有效。你们能指点一个好的解决方案吗?谢谢!
答案 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属性。 您可以按类别对测试进行分组,并仅运行所需的类别。