如何从单元测试中排除名称中带有“Test”的帮助项目?

Posted

技术标签:

【中文标题】如何从单元测试中排除名称中带有“Test”的帮助项目?【英文标题】:How to exclude helper projects with "Test" in their name from unit testing? 【发布时间】:2021-09-30 18:07:25 【问题描述】:

我们有一个名为 Foo.Testing.Common 的实用程序项目,其中包含用于我们实际测试项目的帮助类,例如 Foo.Tests.UnitFoo.Tests.Integration。 Common 项目没有测试,只有基类、实用方法等。它引用了 XUnit,所以我可以使用 Xunit.Abstractions

当我们通过 .net 命令行或 VS 测试资源管理器运行所有测试时,我们如何避免看到类似下面的错误?例如,在测试发现期间,VS 测试输出中会出现以下错误。

No test is available in C:\Foo.Testing.Common\bin\Debug\netcoreapp3.1\Foo.Testing.Common.dll. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
Microsoft.VisualStudio.TestPlatform.ObjectModel.TestPlatformException...

我假设测试过程在 test 上匹配以查找测试项目,然后如果其中一个项目没有测试,则会引发错误。或者它正在寻找引用任何 xunit 包的项目?

我们可以重命名项目,但有不同的方法吗?想避免将特定测试项目的列表传递给命令行,只是为了避免“未找到测试”警告。也就是说,dotnet test 应该可以正常工作。

更新:我也尝试仅引用 xunit.abstractionsxunit.extensibility.core 而不是主要的 xunit 包,但 Common 项目仍被识别为测试项目。

还尝试在项目属性中将IsTestProject 设置为false。

【问题讨论】:

【参考方案1】:

为了跳过Foo.Testing.Common,您可以在Foo.Testing.Common.csproj 中将IsTestProject 属性设置为false:

<PropertyGroup>
  <IsTestProject>false</IsTestProject>
</PropertyGroup>

【讨论】:

不幸的是,我在测试发现输出中仍然收到此错误:Microsoft.VisualStudio.TestPlatform.ObjectModel.TestPlatformException: Unable to find C:\Foo\Foo.Testing.Common\bin\Debug\netstandard2.0\testhost.dll. Please publish your test project and retry. 我尝试重建并重新启动 VS。 你使用什么版本的SDK?可以分享一下csproj文件吗?

以上是关于如何从单元测试中排除名称中带有“Test”的帮助项目?的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 从发布版本中排除测试文件

如何复制名称中带有空格的目录

从 sbt-native-packager 中的 Universal:packageBin 中排除非托管依赖项?

从 DataGrip 中的“数据库、表、过程”搜索中排除数据库

从 jacoco 报告中排除数据绑定包

sh 从提交中排除权限更改的文件