自从我安装VS以来,我一直在与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测试运行器找到任何测试。
DEL %TEMP%\VisualStudioTestExplorerExtensions
Microsoft.DotNet.InternalAbstractions
(see SO post)test -> test settings -> default processor architecture
设置为x86 问题
任何人都可以在VS2017(.csproj项目文件)中提供.Net Core 1.1.0解决方案的工作示例,其中VS测试资源管理器成功找到单元测试 OR 在给出的示例中显示问题
答案 0 :(得分:179)
答案 1 :(得分:120)
这对我有用(不知道是否是更改工作区损坏了某些内容的结果):
在%TEMP%\ VisualStudioTestExplorerExtensions中删除VS测试缓存文件,然后重新启动VS2017。
答案 2 :(得分:55)
.NET Core测试适配器的API随着Visual Studio 2017的发布以及从project.json
格式转换为csproj
格式而发生了变化。这使得现有的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>
上面的评论提到添加,
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
这不是严格要求的,但可以提供帮助。它由Visual Studio自动添加到所有单元测试项目中,以帮助它快速查找带有测试的项目。
如果您的测试不会出现在Visual Studio中,首先要尝试的是关闭解决方案,然后重新打开它们。在编辑项目时,Visual Studio中似乎没有检测到项目更改的错误。
有关详细信息,请参阅Testing .NET Core with NUnit in Visual Studio 2017
答案 3 :(得分:38)
我遇到了同样的问题并通过以下方式让它发挥作用..:
答案 4 :(得分:22)
忘记让测试类公开阻止内部的测试方法被发现
我有一个默认的xUnit项目并删除了示例UnitTest1.cs,用控制器测试类替换它,并进行了几次测试,但没有找到
长话短说,在更新xUnit,Test.Sdk,xUnit.runner包并重建项目后,我遇到了构建错误:
错误xUnit1000测试类必须是公开的
值得庆幸的是,更新后的版本引发了这个例外,以免给我带来麻烦
修改测试类以公开修复我的问题
答案 5 :(得分:10)
在我的情况下,我将测试项目定位到x64
架构,并且测试设置架构(测试 - >默认处理器架构)已更改设置为x86
。他们不匹配。
将测试设置架构设置为x64
并重建后,再次发现所有测试。
答案 6 :(得分:6)
请勿阅读MSDN下的过期文章。 .NET Core相关资料位于docs.microsoft.com
下https://docs.microsoft.com/en-us/dotnet/articles/core/testing/
一般来说,您需要一个.NET Core控制台应用程序来包含单元测试用例。
答案 7 :(得分:6)
我在VS 2017找到我的UnitTest时遇到了麻烦。这不是约翰所问的确切问题 - 但这是谷歌中第一个我寻找的结果,所以我想分享我的问题。
我有一个传统的解决方案从VS2010回来过VS2013,VS2015。现在在VS2017中,[TestMethod]
属性的名称空间似乎已经改变。
在使用之前
Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0
我在项目中创建了一个新的Test.dll,默认情况下使用了一个
Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0
所以我的解决方案是在VS2017中创建一个新的UnitTest项目。也许改变旧测试项目的程序集引用也会起作用。随着新的参考VS2017确实发现了那些单元测试。
答案 8 :(得分:5)
请确保您使用的是正确的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>
但我认为这不是必须的。
答案 9 :(得分:4)
我知道OP已经在他的清单上列出了这个,但是在干净安装Visual Studio 2017和设置新项目时很容易忽略这一点。除了NUnit project template和NUnit Framework之外,还需要单独安装NUnit适配器,例如使用NuGet命令Install-Package NUnit3TestAdapter -Version 3.9.0
。之后,Visual Studio Community 2017开始发现单元测试没有任何问题。
答案 10 :(得分:3)
对我来说,问题是我将测试用例错误地放置在内部类中
[TestClass]
internal class TestLib {
}
导致无法识别测试用例。
答案 11 :(得分:3)
在我的情况下,在将项目移动到新解决方案后,测试资源管理器无法找到我的测试。
答案很简单,我在项目中引用了旧的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')" />
要解决问题,
答案 12 :(得分:2)
上面的顶部答案对我不起作用(重新启动,更新到1.1.18版本......我已经更新,删除临时文件,清除NuGet缓存等)。
我发现在不同的测试项目中我对 MSTest.TestAdapter 和 MSTest.Framework 有不同的引用(我的解决方案有两个)。一个人指出1.1.18就像......
packages.config
<package id="MSTest.TestAdapter" version="1.1.18" targetFramework="net461" />
<package id="MSTest.TestFramework" version="1.1.18" targetFramework="net461" />
...但是另一个人引用了1.1.11。在重新启动Visual Studio后,当我的临时目录(%TEMP%\ VisualStudioTestExplorerExtensions \)中出现两个版本的库时,上面的一些答案导致了这一发现。
只需将packages.config更新到1.1.18版本即可恢复VS中的单元测试功能。似乎有一些错误不允许MSTest库的并行引用。希望这会对你有所帮助。
更多信息:
答案 13 :(得分:2)
就我而言,这是一个我从早期的.Net版本升级测试项目的项目。在app.config中,我将程序集绑定到以前版本的依赖程序集。
在app.config中修复了assembnlybindings之后,我的测试被发现了。
答案 14 :(得分:2)
答案 15 :(得分:2)
只是因为Visual Studio找不到我的测试,没有看到除了方法之外还无法运行它们的按钮,而且没有通过运行项目中的所有测试来拾取它们的问题,所以。
结果证明我的测试课不是公开的!将其公开允许VS发现测试。
答案 16 :(得分:1)
删除旧的.dll会有所帮助。清除位于C:\ Users(yourusername)\ AppData \ Local \ Temp
的%TEMP%目录中的临时文件答案 17 :(得分:1)
对于C ++:
由于C ++测试没有特别的问题,但主题非常相似,当我遇到测试发现问题时,这就是帮助我的。
如果您只安装了使用C ++进行桌面开发,那么解决方案是使用可选的 C ++通用Windows平台工具<安装通用Windows平台开发 / strong>即可。您可以在visual studio Web安装程序中选择它们。
之后,重建您的测试项目,测试发现应该有效。
顺便说一句,我在VS2017中创建了单元测试项目。可能很重要,因为有些用户提到,他们在项目中有发现问题,从VS2015迁移到VS2017。
答案 18 :(得分:1)
解决方案正在从单元测试项目中删除我的app.config
文件。测试会重新出现!
此文件在绑定引用中引用了一些在项目引用中实际上不存在的dll。重新添加您的项目严格必需的程序集绑定。
答案 19 :(得分:1)
就我而言,以上所有对我没有帮助。 但是,我将NUNit3TestAdapter降级到3.8.0版,然后升级到最新版本(3.10.0)
答案 20 :(得分:1)
就我而言,解决方案中存在UWP项目导致问题。
当我卸载UWP项目时,发现了测试。当我把它装回去时,测试再次消失。
尝试卸载所有项目并仅保留测试项目。 Test Runner中出现了十个重建解决方案和测试。逐个加载项目并每次重建解决方案以找出导致问题的项目
答案 21 :(得分:1)
我有同样的问题。我的解决方案还可以,但是当我打开解决方案时突然发现测试已经消失了。
最后,我将Microsoft.VisualStudio.TestPlatform.TestFramework
和Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
软件包降级到一个非常旧的版本(使用NuGet管理器),测试方法出现了。然后我升级到最新版本,仍然有那里。
所以只需降级和升级软件包。
答案 22 :(得分:1)
我尝试了一切,但没有任何帮助。在我的情况下,我有一个包含多个测试项目的解决方案,其中一些使用旧的ms-test框架,因此Visual Studio只找到了那些。
我为所有测试项目安装了测试框架包,如accepted answer所示。然后删除了对旧质量工具的引用,重新启动了Visual Studio,现在我可以看到所有测试。
答案 23 :(得分:0)
对我来说,从
更改测试项目的.csproj
文件中的TargetFramework
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
到
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
的工作。
答案 24 :(得分:0)
起初,我尝试过使用MSTest。之后,我将其更改为Nunit测试。然后我想支持MSTest。我删除了所有nUnit代码和引用,但Test Explorer没有显示MSTest方法。解决方案:我删除了所有mstest nuget引用并重新安装。完成。
答案 25 :(得分:0)
问题是Visual Studio对机器上的dotnet核心版本感到“困惑”。当我去控制面板 - &gt;卸载程序我安装了8个不同的dotnet核心SDK和Runtimes。这在某种程度上导致VS在尝试查找测试时默默地出错。
您可以转到命令行并在$ dotnet --version
上获取dotnet版本来验证问题。如果您看到除安装的最新版本以外的任何内容,那么您的计算机会出现一些不匹配的情况,并且未使用正确的版本。示例...如果您安装了dotnet核心1.0.1
,但是当您在命令提示符处获得版本并且1.0.0
表示存在问题时。
删除所有旧东西。我开始只使用我需要删除的内容(最旧的dotnet rc版本),但在测试问题时它仍然提供了错误的版本。最终我承认做了彻底清洁。我...
在我的机器完全没空的所有VS和donet后,我安装了仅 VS2017(它附带最新的dotnet)。我创建了一个xUnit测试项目,测试资源管理器立即找到了测试已解决
这似乎有点矫枉过正,但我花了两周的时间试图以其他方式解决这个问题。如果您遇到问题,即使卸载/重新安装项目可能需要数小时,也可能会节省您的时间。
答案 26 :(得分:0)
在我的情况下,问题是项目类型设置为静态库(lib),而应该是动态库(dll)
答案 27 :(得分:0)
有时候,我发现单元测试代码中是否存在stackoverflow异常,Visual Studio会将该单元测试用例标记为未运行,并将停止运行此案例之后的其他测试用例。
在这种情况下,您必须找出是哪种情况导致了stackoverflow异常。
答案 28 :(得分:0)
有时会更改测试的名称空间。我的文件夹结构如下:
A
|___B
| |___D
|___C___E
名称空间像Tests。
不要忘记构建您的项目!
答案 29 :(得分:0)
答案 30 :(得分:0)
我删除了该项目的BIN和OBJ文件夹。一旦执行完,一切正常。
答案 31 :(得分:0)
对于.NET Framework,在测试项目中以前曾经引用以下DLL:
Microsoft.VisualStudio.TestPlatform.TestFramework
Microsoft.VisualStudio.TestPlatform.TestFramework.Extentions
我删除了它们,并添加了对以下内容的引用:
Microsoft.VisualStudio.QualityTools.UnitTestFramework
然后出现了所有测试,并以与以前相同的方式开始工作。
之前,我尝试了几乎所有其他建议,但是简单地重新引用测试DLL可以正常工作。 我把这个答案发布给了我这个人。
答案 32 :(得分:0)
为了解决这个问题,我面临着同样的问题
答案 33 :(得分:0)
从Visual Studio 2017迁移到2019时遇到相同的问题。我必须在所有测试项目中重新安装 Microsoft.NET.Test.Sdk 。
答案 34 :(得分:0)
对我来说,我需要运行它,它更新了单元测试项目的所有nunit适配器链接:
安装软件包Nunit3TestAdapter
答案 35 :(得分:0)
答案 36 :(得分:-4)