我可以从命令行(因此从构建机器上的构建)成功运行 VS 单元测试。
VSTest.Console.EXE "MyTest.dll" /logger:trx /platform:x64 /inIsolation
我还可以使用 /TestCaseFilter
选项过滤掉我不想在特定环境中执行的任何必需测试:
VSTest.Console.EXE "MyTest.dll" /TestCaseFilter:Name!=Verify_DigitallySigned
这是不运行“检查是否数字签名”测试所必需的。
这样我就可以筛选出所需的测试用例集。
但是,我想要的是让单元测试知道是否不需要某些测试(断言)。例如传递一个 "/DontTestSigning"
参数。这样,单元测试(用 C++ 或 C# 编写)将看到这样的参数/选项,并且不会做额外的断言,从而防止在非真实生产构建(例如 PR 构建)上的构建失败。
我看到 VSTest.Console.exe(还有 MSTest.exe)有 /testsettings
选项,但我不确定 (IF)可以应用并让实际的测试函数知道一些“不要做”的选项。
最佳答案
您还可以向 vstest.console 进程提供一个 .runsettings 文件,如此处所示。 https://learn.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
关于c# - 从 VSTest.Console.exe 向单元测试传递参数或选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56806702/