我已经在这个问题上挣扎了很长一段时间了。一些背景:我使用 Selenium 创建了我的自动化测试框架。第一个项目是纯 NUnit 测试,第二个项目完成测试的所有工作。现在,在测试项目中,我将目录保存到运行测试的所有环境中。到目前为止,我的许多测试都是只读的,并且不太关心测试是否没有在它们应该运行的环境中运行。当我开始运行一些“写入”测试时,这种情况发生了变化。
我需要阻止此“写入”测试在本地主机以外的任何其他环境上运行。到目前为止,我尝试使用方法属性并在运行时获取测试方法名称,然后进行工作,但这不是很有效。你们能给我指点一个好的解决方案吗?谢谢!
我会使用特定类别名称标记要排除的测试,然后定义一个 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");
}
}
希望这有帮助!
NUnit 有 category 属性。 您可以按类别对测试进行分组并仅运行所需的类别。