C# Visual Studio 有条件地运行单元测试

问题描述 投票:0回答:1

我必须对一些涉及 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
可以实现类似的功能吗?我们已经为该框架编写了所有测试,所以我不想引入另一个框架?

c# visual-studio unit-testing mstest
1个回答
0
投票

来自答案:如何在运行时跳过单元测试?

您可以扩展 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()
    {
        //...
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.