首页 > 解决方案 > 如何在 Nuke 构建中使用 VSTest

问题描述

我正在尝试使用 Nuke 运行 VSTest,因为我的一些测试在 .Net Framework(不是核心)中。

我有一个成功运行的测试:

VSTest(@".\test\MyTestProjectFolder\bin\Debug\net47\MyTestProject.dll");

...但如果我不需要,我不喜欢指向 bin\debug\net47 文件夹。

我更愿意指出测试项目的来源,甚至是解决方案。

跑步

VSTest(@".\test\**\*.csproj");

返回一个包含 9 个实例的 IReadOnlyCollection<Output> ?对应我的9个测试项目,但是如何执行,或者选择一个或多个执行?

流利的语法是可取的,只是无法弄清楚。

标签: nuke-build

解决方案


免责声明:我对核武器很陌生。

恐怕 VSTest 真的只接受 DLL 文件的路径。这就是我构建路径的方式:

Target Test => _ => _
    .DependsOn(Compile)
    .Executes(() => {
        var proj = Solution.GetProject("Tests");
        var outDir = proj.GetMSBuildProject(Configuration).GetPropertyValue("OutputPath");
        var assembly = proj.Directory / outDir / "Tests.dll";
        VSTest(assembly);
    });

它仍然一点也不漂亮或不方便,但至少硬编码的路径部分消失了。

另外,我不确定net47您的路径中的部分。我不认为它是OutputPath财产的一部分。但是GetMSBuildProject()需要第二个可选参数targetFramework,它可以帮助解决这个问题。

由于您有多个测试项目,您可能会发现SetTestAssemblies(IEnumerable<string>)有帮助:

VSTest(s => s.SetTestAssemblies(assemblies));

推荐阅读