VS 2017无法在.NET Core上发现测试

20

有人可以帮我让VS2017与.NET Core测试项目配合使用吗?

我尝试从VS 2017模板创建了MSTest和xUnit单元测试项目,但它们都无法在测试资源管理器中工作(未被发现),但是从项目文件夹运行dotnet test却没问题。

复制步骤:

  1. 在VS 2017中创建新项目
  2. 选择Unit Test Project (.NET Core)xUnit Test Project (.NET Core)模板
  3. 实现任意单元测试
  4. 构建解决方案
  5. 进入测试资源管理器并尝试Run All

此时输出窗口应告诉您未发现0个测试

.csproj文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>

</Project>

如果我尝试使用针对.NET Framework(完整版,而不是.NET Core)的模板创建MSTest单元测试项目,则可以工作。

有任何想法吗?


1
https://dev59.com/y5zha4cB1Zd3GeqPLd3X 的答案帮助我解决了这个问题。 - Alexey Andrushkevich
那真的起作用了。非常感谢! - valorl
8个回答

15

谢谢!我正在运行VS2017 Pro 15.1,这是唯一修复我的方法。 - Nicole Sands

7
我认为我经历了同样的情况。尝试构建你的解决方案,以便VS可以发现你的测试。否则,请分享你的测试csproj文件,以确保你引用了正确的包。我的是:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>

</Project>

更新:我已经尝试了一些操作,发现如果没有<OutputType>Exe</OutputType>,VS将无法找到测试。

更新2:另外,根据我的观察,有时候VS会自动添加以下代码到csproj中。

<ItemGroup>
  <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>

我没有提到,但我确实构建了,不幸的是构建并没有帮助。我在我的帖子中编辑了我的.csproj文件。与您的唯一区别是那里的OutputType标记。我尝试添加它,但没有任何区别。 - valorl
@valorl 请尝试添加 OutputType 并重新构建。 - Andrii Litvinov
所以我重新启动了电脑,创建了一个干净的解决方案和一个干净的xunit测试项目,添加了<OutputType>Exe</OutputType>,重新构建并尝试运行所有测试。但是没有成功...即使我以管理员身份运行VS也不行。我会尝试重新安装,也许会有帮助。 - valorl
即使我已经重新安装了,仍然没有成功... 我的VS版本是 Community 2017, VisualStudio/15.0.0-RTW+26228.4 - valorl
如果你进入命令行并输入“dotnet --version”,它会显示什么? - Taylor H.
显示剩余4条评论

5

我在使用VS 2017和.NET Core时遇到了问题,无法发现MSTest单元测试。

测试输出仅报告其未发现任何测试。

在命令提示符中运行dotnet test MyProject.csproj -t后,它建议我未安装正确的.NET Core运行时以匹配项目的RuntimeFrameworkVersion。

安装最新的VS 2017更新和.NET Core运行时可以解决此问题。


1
谢谢DGreen。我也遇到了VS 2017发现单元测试的问题。虽然我引用了正确的框架,但你提到的上述命令让我发现我没有将单元测试类的访问修饰符设置为public! - m2web
谢谢,我运行了命令并收到一个警告,说测试类没有标记为公共的,我添加了public关键字,现在我可以看到我的测试了。 - Ali

2

我遇到了同样的问题。我通过从Nuget安装“Microsoft.NET.Test.Sdk”包来解决它。


我添加了Microsoft.NET.Test.Sdk,但它没有解决我的问题。 - Francisco d'Anconia
我来这里分享完全相同的事情。在解决方案中,我有一个项目,在其中几个项目中,神秘地不会显示测试。最终,这就是解决问题的方法。所以我点赞。 - Arwin
当我将我的项目从.NET Framework v4.6.1切换到.NET Core 3.1后,我的测试停止显示时,这对我有用。 - David

0
请确保在具有多个测试项目和相同输出目录时,*.csproj 文件中没有混合的 PackageReference 版本,并且特别是更新测试项目的包,尤其是 MSTest.TestAdapter 和 MSTest.TestFramework。

0

0

在从project.json迁移到csproj后,我遇到了同样的问题。通过删除net451目标框架,只留下netcoreapp1.1来解决它。现在它完美地工作并且每次都能发现。

当然,如果您需要多个框架目标,则不应该这样做,只需使用CLI进行测试即可...


0

我也遇到过这个问题,解决方法是确保我的项目和测试项目在 .csproj 文件中具有相同的目标框架版本。

<TargetFramework>netcoreapp1.0</TargetFramework>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接