在Visual Studio 2017中未发现unit testing

自从我安装VS之后,我一直在努力。 现在看来unit testing只能从命令行“dotnettesting”运行。

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

我已经尝试在MSDN示例( https://msdn.microsoft.com/en-us/library/ms182532.aspx )也失败了完全相同的方式。

所有testing和主项目的NuGet包都是最新的。 testing项目和主要项目都没有错误。 testing从命令行成功运行。

有没有人得到unit testing运行在VS 2017,如果是的话如何?

谢谢,约翰


更新 – 延伸

这里是一个简单的testing项目的例子,不工作在GitHub上 。 这是一个xUnit的例子,但我已经尝试过在MStesting中build立的NUnit和visual studio。 无论做什么testing或者我做了什么改变,我都无法让VStesting跑步者find任何testing。

我所试过的

  • 删除VStestingcaching文件DEL %TEMP%\VisualStudioTestExplorerExtensions
  • 重新启动VS
  • closures/打开testing浏览器
  • 为xUnit安装Microsoft.DotNet.InternalAbstractions ( 见SO后 )
  • 对于NUnit,确保安装了适配器,并且与NUnit软件包相同的版本(3)
  • test -> test settings -> default processor architecture设置为x86

问题
任何人都可以在VS2017(.csproj项目文件)中提供一个.Net Core 1.1.0解决scheme的工作示例,其中VStesting资源pipe理器可以成功findunit testing, 或者在给出的示例中向我显示问题。

就我而言,事实certificate,我只需要升级我的testing适配器和testing框架。 完成。

使用NuGet包pipe理器的示例:

在这里输入图像说明

用于.NET Core的testing适配器的API随Visual Studio 2017的发布以及从project.json格式转换为csproj格式而改变。 这使得像dotnet-test-nunit这样的现有的dotnet-test-*适配器已经过时。

适配器已更新,但在Visual Studio中或在使用dotnet test的命令行上设置和运行testing的方式需要在testing项目中使用不同的引用。 小心任何文档,你发现在dotnet-test-*格式的参考包,因为它们已经过时了。

首先, 您的testing项目必须针对特定平台,无论是.NET Core还是.NET Framework。 即使您正在testing的代码是.NET Standard, 它也不能以.NET Standard为目标 。 这是因为testing的目标指示在哪个平台上运行testing。 .NET标准就像一个PCL(可移植类库),因为它可以在很多平台上运行。

接下来,您需要添加对Microsoft.NET.Test.Sdk引用,您select的testing框架和兼容的testing适配器。 对于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> 

上面的评论提到,

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

这不是严格要求,但可以提供帮助。 它被Visual Studio自动添加到所有的unit testing项目中,以帮助它快速find包含testing的项目。

如果您的testing没有出现在Visual Studio中,首先要尝试closures您的解决scheme,然后重新打开它们。 在编辑时,Visual Studio中似乎没有检测到项目更改。

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

我有同样的问题,并得到它通过做以下工作..:

  • 首先closures所有打开的Visual Studio实例并删除这个文件夹:%TEMP%\ VisualStudioTestExplorerExtensions。( 用Visual Studio运行testing )
  • 转到您的Nuget包pipe理器,并先安装Microsoft.NET.Test.Sdk(15.3.0-preview-20170425-07),然后安装xunit.runner.visualstudio(2.3.0-beta1-build1309)。 查看附件Nuget截图,查看我必须安装的所有软件包才能获得最新的VS 2017来检测我的testing。 Nuget截图

这只是为我工作(不知道是否是改变工作空间的结果,损坏的东西):

删除%TEMP%\ VisualStudioTestExplorerExtensions中的VStestingcaching文件并重新启动VS2017。

请勿在MSDN下读取date文章。 .NET Core相关资料位于docs.microsoft.com下

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

一般来说,您需要.NET Core控制台应用程序来包含unit testing用例。

我在VS 2017findUnitTest时遇到了麻烦。 这不是约翰问的确切问题 – 但这是我第一次find谷歌的结果,所以我想分享我的问题。

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

在使用之前

 Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0 

我在项目中创build了一个新的Test.dll,默认使用了一个

 Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0 

所以我的解决scheme是在VS2017中创build一个新的UnitTest项目。 也许更改旧的testing项目的程序集引用也可以。 随着新的参考VS2017确实发现了那些unit testing。

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

 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" /> 

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

另外,您可能需要添加:

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

但我不认为这是杞人忧天

就我而言,UWP项目出现在导致问题的解决scheme中。

当我卸载UWP项目时,发现了testing。 当我把它装回去时,再次testing消失。

尝试卸载所有项目,只保留testing项目。 Test Runner中出现十个重build解决scheme和testing软件。 逐个加载项目,每次重build解决scheme以找出导致问题的项目

样品回购

VS错误报告

我尝试了一切,但没有任何帮助。 在我的情况下,我有一个解决scheme与几个testing项目,其中一些使用旧的MStesting框架,所以Visual Studio只发现了这些。

我为接受的答案中显示的所有testing项目安装了testing框架包。 然后删除旧的质量工具的参考,重新启动Visual Studio,现在我可以看到所有的testing。

在我的情况下,我将项目移动到一个新的解决scheme后,testing资源pipe理器找不到我的testing。

答案只不过是我在我的项目中引用了旧的MS Test Adapter。

在我的cs.proj文件中,我有一个MS Test Adapter版本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. 右键单击项目,然后select卸载项目。
  2. 右键单击项目,然后select编辑
  3. 删除导入旧版本适配器的行。
  4. 右键单击项目,然后select重新加载项目。
  5. 重build解决scheme/项目

问题

问题在于Visual Studio在机器上的dotnet核心版本上变得“困惑”。 当我去控制面板 – >卸载程序我有8个不同的dotnet核心SDK和运行时安装。 这在某种程度上导致VS在尝试查找testing时默默地出现错误。

validation问题

您可以通过转到命令行并获取dotnet版本的$ dotnet --version来validation问题。 如果您看到除了您安装的最新版本以外的任何内容,那么您的机器有一些不匹配,并且没有使用正确的版本。 示例…如果你已经安装了dotnet核心1.0.1但是当你在命令提示符下获得版本时,它说1.0.0这是一个问题。

解决scheme

删除所有旧的东西。 我只是从我需要删除的东西(最老的dotnet rc版本)开始的,但在testing问题时仍然给出了错误的版本。 最终我承认做了一个完整的清洁。 一世…

  • 卸载所有的Visual Studio应用程序(在我的机器VS2015和VS2017)
  • 卸载所有版本的dotnet核心(甚至最近)

在我的机器完全清空了所有的VS和donet之后,我安装 VS2017(它包含了最新的dotnet)。 我创build了一个xUnittesting项目,testing资源pipe理器立即find了testing求解

这可能看起来像是过火,但我花了两个星期的时间试图用其他方式解决这个问题。 如果你有这个问题,即使它可能需要几个小时来卸载/重新安装项目,它可能会节省您的时间。

参考

  • 看到@epestic 博客post ,他提供了更多关于解决问题的细节。

对于我来说更容易创build一个新的testing项目,使用Visual Studio 2017完美的工作…只需要复制testing文件,添加引用和NuGet包。

在这里输入图像说明

起初,我试图使用MSTest。 之后,我把它改为Nunittesting。 然后我想回MSTest。 我删除了所有的nUnit代码和引用,但是testing浏览器没有显示MSTest方法。 解决scheme:我删除了所有mstest nuget引用并重新安装。 完成。

对我来说,改变testing项目的.csproj文件中的TargetFramework

  <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup> 

  <PropertyGroup> <TargetFramework>net46</TargetFramework> </PropertyGroup> 

工作。

这不再是一个问题。 VS最近的更新解决了这个问题,unit testing现在可以按照预期工作。

我有同样的问题,我通过将应用程序输出types更改为控制台应用程序来解决它,如下所示:

在这里输入图像说明