繁体   English   中英

从VSTest.Console.exe将参数或选项传递给单元测试

[英]Pass argument or option to Unit Tests from VSTest.Console.exe

我可以从命令行(因此可以从构建计算机上的构建)成功运行VS单元测试。

VSTest.Console.EXE "MyTest.dll" /logger:trx /platform:x64 /inIsolation

我还可以使用/TestCaseFilter选项过滤掉我不想在特定环境中执行的所有必需测试:

VSTest.Console.EXE "MyTest.dll" /TestCaseFilter:Name!=Verify_DigitallySigned

这需要运行“检查数字签名”测试(S)。

这样,我可以过滤出所需的一组测试用例。

但是,我想要的是让单元测试知道是否不需要某些测试(断言)。 例如,传递"/DontTestSigning"参数。 这样,单元测试(用C ++或C#编写)将看到这样的参数/选项,并且不会执行其他断言,从而防止了在非真实生产版本(例如PR版本)上的版本失败。

我看到VSTest.Console.exe(还有MSTest.exe)有/testsettings选项,但是我不确定如何应用(IF)并让实际的测试功能知道一些“不要做” “ 选项。

基本上,您应该主张测试中仅包含一个Assert ,以便每个测试都检查一个事物

因此,我想您拥有的与此类似:

[Test]
public void MyTest()
{
    Assert.That(...);
    Assert.That(...);
    Assert.That(...);
}

当您要排除例如第二个Assert ,您当然必须在代码中提供一些功能来执行或不执行这些行,例如:

public void MyTest()
{
    Assert.That(...);
    if(executeSecondAssert)
        Assert.That(...);
    Assert.That(...);
}

您可以引入一些编译开关来设置上述bool-flag的值:

#if(EXECUTE_ASSERT)
    bool executeSecondAssert = true;
#else
    bool executeSecondAssert = false;

并且现在通过环境变量提供该编译开关。

您还可以向vstest.console-process提供.runsettings文件,如下所示。 https://docs.microsoft.com/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file?view=vs-2019

为了提供自定义参数,请修改TestRunParameters ,例如:

<!-- Parameters used by tests at runtime -->
<TestRunParameters>
  <Parameter name="executeAsserts" value="1,2,3" />
</TestRunParameters>

现在可以通过以下代码访问这些参数:

TestContext.Properties["executeAsserts"];

这样您的最终测试代码可能如下所示:

[Test]
public void MyTest()
{
    var assertsToRun = TestContext.Properties["executeAsserts"].Split(",").Select(x => Convert.ToInt(x)).ToArray();
    if(assertsToRun.Contains(1)
        Assert.That(...);
    if(assertsToRun.Contains(2)
        Assert.That(...);
    if(assertsToRun.Contains(3)
        Assert.That(...);
}

您应该能够使用以下命令运行测试:

vstest.console.exe MyTestAssembly.dll /Settings:MySettings.runsettings

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM