在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。
这只是为我工作(不知道是否是改变工作空间的结果,损坏的东西):
删除%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')" />
要解决这个问题,
- 右键单击项目,然后select卸载项目。
- 右键单击项目,然后select编辑
- 删除导入旧版本适配器的行。
- 右键单击项目,然后select重新加载项目。
- 重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更改为控制台应用程序来解决它,如下所示: