我必须对一些涉及 Linux 和 Windows 服务器的 SSH 通信的库功能进行单元测试。
我有一个用户提供的
test_config.json
文件。该配置主要包含两个属性:
public ServerConfig? TestServerLinux { get; set; }
public ServerConfig? TestServerWindows { get; set; }
这就是我面临的问题:这些测试只会在本地运行,而不是在任何管道中运行,并且由于此测试 Windows 服务器是一台真实的机器,因此 Linux 可能会在开发机器上作为 Docker 容器启动。
我的所有测试课程将分为Windows和Linux,或者包含针对Windows和Linux的单独测试方法。我希望仅当该服务器的配置已填充时才有条件地运行每个测试。
因此,如果 Windows 服务器配置为 null,则不应运行 Windows 的所有 TestClasses(或 TestMethods)。
使用
Microsoft.VisualStudio.TestTools.UnitTesting
可以实现类似的功能吗?我们已经为该框架编写了所有测试,所以我不想引入另一个框架?
来自答案:如何在运行时跳过单元测试?
您可以扩展 TestMethodAttribute。根据名称选择要运行的方法或读取配置文件,然后返回 true 或 false。
public class TestMethodForConfigAttribute : TestMethodAttribute
{
public string Name { get; set; }
public TestMethodForConfigAttribute(string name)
{
Name = name;
}
public override TestResult[] Execute(ITestMethod testMethod)
{
if (IsConfigEnabled(Name))
{
return base.Execute(testMethod);
}
else
{
return new TestResult[] { new TestResult { Outcome = UnitTestOutcome.Inconclusive } };
}
}
public static bool IsConfigEnabled(string name)
{
if (name == "Windows")
return true;
else
return false;
}
}
测试方法
[TestClass]
public class UnitTest1
{
[TestMethodForConfig("Windows")]
public void MyTest()
{
//...
}
}