在Visual Studio 2017中未发现单元测试

Joh*_*ite 202 unit-testing visual-studio-2017

自从我安装它以来,我一直在与VS 2017挣扎.现在似乎单元测试只能从命令行"dotnet test"运行.

我的项目是.NET Core 1.1.1.我安装了SDK和1.1.1的框架更新.

我在MSDN上尝试了这个示例(https://msdn.microsoft.com/en-us/library/ms182532.aspx),它也完全失败了.

测试和主项目的所有NuGet包都是最新的.测试项目和主项目都没有错误地构建.测试从命令行成功运行.

有没有人在VS 2017中进行单元测试,如果是这样的话怎么样?

谢谢,约翰


更新 - 扩展

以下是一个不能在GitHub上运行的简单测试项目的示例.这是xUnit的一个例子,但我尝试过在MS测试中构建的NUnit和visual studio.无论我做什么测试或改变我都无法让VS测试运行器找到任何测试.

我试过的

  • 删除VS测试缓存文件 DEL %TEMP%\VisualStudioTestExplorerExtensions
  • 重启VS.
  • 关闭/打开测试资源管理器
  • 安装xUnit Microsoft.DotNet.InternalAbstractions(参见SO帖子)
  • 对于NUnit,请确保已安装适配器,并且与NUnit软件包版本(3)相同
  • test -> test settings -> default processor architecture 设置为x86

问题
任何人都可以在VS2017(.csproj项目文件)中提供.Net Core 1.1.0解决方案的工作示例,其中VS测试资源管理器成功找到单元测试在给出的示例中向我显示问题.

Qua*_*yst 186

就我而言,事实证明我只需要升级我的测试适配器和测试框架.完成.

使用NuGet包管理器的示例:

在此输入图像描述

  • 这些东西应该是Visual Studio的扩展,而不是NuGet包. (44认同)
  • 这对我也有帮助!请注意,您可以在解决方案级别"管理Nuget软件包",并对需要此项的所有项目执行此操作.然后你可能会得到"ambigous reference"错误 - 对于这些错误,只需从引用中删除旧的DLL(Microsoft.VisualStudio.QualityTools.UnitTestFramework) (4认同)

Pma*_*Ace 123

这对我来说很有用(不知道是否是更改工作区损坏了某些内容的结果):

在%TEMP%\ VisualStudioTestExplorerExtensions中删除VS测试缓存文件并重新启动VS2017.

  • 任何想知道`%TEMP%`的地方 - 带来命令窗口并输入`echo%TEMP%` (22认同)
  • temp中不存在文件夹:/ (19认同)
  • 这工作一次,而不是之后.什么(这次)为我修复了删除TestResults文件夹和bin/obj(以及此临时目录清理) (3认同)

Rob*_*use 54

随着Visual Studio 2017的发布以及从project.json格式到csproj格式的转变,.NET Core测试适配器的API发生了变化.这使现有的dotnet-test-*适配器dotnet-test-nunit过时了.

适配器已更新,但您在Visual Studio或命令行中设置和运行测试的方式dotnet test需要在测试项目中使用不同的引用.请注意您发现的任何文档,dotnet-test-*因为它们已过时而引用了格式的包.

首先,您的测试项目必须针对特定平台,.NET Core或.NET Framework.即使您测试的代码是.NET Standard,它也无法以.NET Standard为目标.这是因为测试的目标指示了运行测试的平台..NET Standard就像PCL(可移植类库),因为它可以在许多平台上运行.

接下来,您需要添加对Microsoft.NET.Test.Sdk所选测试框架和兼容测试适配器的引用.对于NUnit,您的引用将如下所示,

<itemgroup>
    <packagereference Include="Microsoft.NET.Test.Sdk" Version="15.0.0"></packagereference>
    <packagereference Include="NUnit" Version="3.7.1"></packagereference>
    <packagereference Include="NUnit3TestAdapter" Version="3.8.0"></packagereference>
</itemgroup>
Run Code Online (Sandbox Code Playgroud)

上面的评论提到添加,

<ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这不是严格要求,但可以提供帮助.它由Visual Studio自动添加到所有单元测试项目中,以帮助它快速查找带有测试的项目.

如果您的测试没有出现在Visual Studio中,首先要尝试关闭解决方案,然后重新打开它们.在编辑项目时,Visual Studio中似乎没有检测到项目更改的错误.

有关更多信息,请参阅在Visual Studio 2017中使用NUnit测试.NET Core

  • 我的项目中缺少Microsoft.NET.Test.SDK引用,并且没有迹象表明任何依赖它的东西都可以显示.通过nuget控制台添加它,一切都开始工作.感谢参考列表! (7认同)
  • 针对.NET Framework而不是.NET Standard为我工作.谢谢. (2认同)

小智 40

我有同样的问题,并通过以下方式让它工作..:

  • 首先关闭所有打开的Visual Studio实例并删除此文件夹:%TEMP%\ VisualStudioTestExplorerExtensions.(使用Visual Studio运行测试)
  • 转到Nuget包管理器并首先安装Microsoft.NET.Test.Sdk(15.3.0-preview-20170425-07),然后安装xunit.runner.visualstudio(2.3.0-beta1-build1309).请参阅随附的Nuget屏幕截图,查看我必须安装的所有软件包,以获取最新的VS 2017来检测我的测试.Nuget截图

  • 删除**%Temp%\ VisualStudioTestExplorerExtensions**对我来说已经足够了. (35认同)

kid*_*oca 31

忘记让测试类公开防止里面的测试方法被发现

我有一个默认的xUnit项目并删除了示例UnitTest1.cs,用控制器测试类替换它,并进行了几次测试,但没有找到

长话短说,在更新xUnit,Test.Sdk,xUnit.runner包并重建项目后,我遇到了构建错误:

错误xUnit1000测试类必须是公共的

值得庆幸的是,更新后的版本抛出了这个异常,以免给我带来麻烦

修改测试类是公开修复我的问题

  • 不知道为什么要投票,但在我早晨咖啡100%之前,这被我忽略了. (6认同)
  • 那个令人难以置信的尴尬,但......无论如何.热闹的是,如果你在VS2017中创建一个测试套件案例,它将不会**生成`public`类,而只是类,所以在添加`public`标识符之前它不会发现它. (2认同)

Mig*_*Slv 10

在我的情况下,我将测试项目定位到x64架构,并将测试设置架构(测试 - >默认处理器架构)更改设置为x86.他们没有匹配.

将测试设置架构设置为x64并重建后,再次发现所有测试.


TAR*_*RJU 9

对我来说,问题是我错误地将测试用例放在内部类中

[TestClass]
internal class TestLib {
}
Run Code Online (Sandbox Code Playgroud)

这导致无法识别测试用例。


小智 7

我在VS 2017找到我的UnitTest时遇到了麻烦.这不是约翰所问的确切问题 - 但这是谷歌中第一个我寻找的结果,所以我想分享我的问题.

我有一个传统的解决方案从VS2010回来VS2013,VS2015.现在在VS2017中,[TestMethod]属性的名称空间似乎已经改变.

在它使用之前

Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0
Run Code Online (Sandbox Code Playgroud)

我在项目中创建了一个新的Test.dll,默认情况下使用了一个

Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0
Run Code Online (Sandbox Code Playgroud)

所以我的解决方案是在VS2017中创建一个新的UnitTest项目.也许改变旧测试项目的程序集引用也会起作用.随着新的参考VS2017确实发现了那些单元测试.


Lex*_* Li 6

不要阅读MSDN下的过时文章..NET Core相关材料位于docs.microsoft.com下

https://docs.microsoft.com/en-us/dotnet/articles/core/testing/

一般来说,您需要一个.NET Core控制台应用程序来包含单元测试用例.


小智 5

确保您使用的是正确的Microsoft.NET.Test.Sdk:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
Run Code Online (Sandbox Code Playgroud)

不要使用预发布的.或者您必须更改为控制台应用程序(而不是库).我有类似的问题,但随着最新版本(15.0.0)它再次开始工作.

此外,您可能需要添加:

  <ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

但我认为这不是必须的.


jnt*_*jnt 5

就我而言,在我将项目移至新解决方案后,测试资源管理器找不到我的测试。

答案很简单,我在我的项目中引用了旧的 MS 测试适配器。

我的 cs.proj 文件中有 MS 测试适配器 1.1.11 版的以下行的副本:

<Import Project="..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props')" />

为了解决这个问题,

  1. 右键单击项目并选择“卸载项目”。
  2. 右键单击项目并选择“编辑”
  3. 删除导入旧版本适配器的行。
  4. 右键单击项目并选择“重新加载项目”。
  5. 重建解决方案/项目


Mar*_*ier 5

我知道OP已在他的清单中列出了这一点,但是在执行Visual Studio 2017的全新安装并设置新项目时,很容易忽略这一点。除了NUnit项目模板NUnit Framework,还需要单独安装NUnit适配器,例如,使用NuGet命令Install-Package NUnit3TestAdapter -Version 3.9.0。之后,Visual Studio Community 2017开始没有任何问题地发现单元测试。