nuke-build - 如何在 Nuke 构建中使用 VSTest
问题描述
我正在尝试使用 Nuke 运行 VSTest,因为我的一些测试在 .Net Framework(不是核心)中。
我有一个成功运行的测试:
VSTest(@".\test\MyTestProjectFolder\bin\Debug\net47\MyTestProject.dll");
...但如果我不需要,我不喜欢指向 bin\debug\net47 文件夹。
我更愿意指出测试项目的来源,甚至是解决方案。
跑步
VSTest(@".\test\**\*.csproj");
返回一个包含 9 个实例的 IReadOnlyCollection<Output> ?对应我的9个测试项目,但是如何执行,或者选择一个或多个执行?
流利的语法是可取的,只是无法弄清楚。
解决方案
免责声明:我对核武器很陌生。
恐怕 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));
推荐阅读
- javascript - 在 AngularJS 1.6 中的兄弟组件之间交流更改
- python - Python:使用远程变量进行循环的参数
- c# - Android - 自定义列表视图 C# 中的搜索选项
- c# - Async/Await 和 ConfigureAwait - 稍后使用“未知”方法签名执行任务
- android - 来自谷歌服务的图书馆
- mongodb - 仅返回 mongodb 中的嵌套文档
- angular - 为 ASP.NET Core 2.1 Angular 项目配置 Dockerfile
- c++ - 锁被线程保留太久
- javascript - 动态 MySQL 查询以填充要在 MapBox GL-JS 中显示的 GeoJson 数据缓存
- c# - dotnet 从命令提示符运行