Visual Studio 2015或2017无法发现单元测试


165

编辑2016-10-19:

最初的问题是关于使用XUnit测试运行程序的VS2015 CTP6特有的问题。从答案中可以很明显地看出,Visual Studio中的单元测试发现存在着更为广泛的问题,这可能发生在许多不同的情况下。我整理了我的问题以反映这一点。

我还在自己的答案中包含了一个脚本,直到今天,当类似问题出现时,我仍会使用该脚本来解决它们。

事实证明,许多其他答案也有助于更好地理解VS测试运行程序的复杂性。我感谢人们仍在分享他们的解决方案!


原始问题2015-04-10:

从昨天开始,我的Visual Studio Test Explorer将不会发现我的任何项目的测试。构建后,它也不显示绿色的加载栏。

当我转到Visual Studio测试资源管理器并单击“全部运行”时,或者当我右键单击任何测试方法并选择“运行测试”时,我将在输出窗口中获得以下内容:

Could not load file or assembly 'Microsoft.VisualStudio.Web.ProjectSystem, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

我在Windows 10运行Visual Studio 2015年CTP 6 Pro的技术预览版,构建10041. .NET Framework版本似乎并不重要-它发生的4.04.5.24.6

我尝试使用以下测试框架,并且所有框架都具有相同的行为:

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
  • xunit v2.1.0-beta1-build2945xunit.runner.visualstudio v2.1.0-beta1-build1051
  • NUnit v2.6.4NUnitTestAdapter v2.0.0

我在GitHub(xunit)上发现了一个看起来类似的问题:xunit团队发表了以下评论,无法发现测试#295

请注意,据报告,Visual Studio 2015 CTP 5已被许多进行单元测试的人员破坏(不仅仅是xUnit.net),因此不要指望它能起作用。

另外,请确保您已经清除了Visual Studio的运行器缓存。如果损坏,Visual Studio将永久行为不端,直到将其删除。要清除缓存,请关闭所有Visual Studio实例,然后删除文件夹%TEMP%\ VisualStudioTestExplorerExtensions(老实说,删除%TEMP%中可以删除的所有内容可能不会受到损害)。

我尝试了他们的建议删除该文件夹%TEMP%\VisualStudioTestExplorerExtensions。不幸的是,这不能解决问题。

我注意到,实际上ReSharper的能够发现一些测试。它仅适用于VS和NUnit测试,不适用于xunit。

我必须清除某种临时文件夹或缓存文件夹,但是我知道Visual Studio有许多临时文件夹或缓存文件夹,并且并非可以删除所有它们而没有不良影响。


3
我很高兴偶然发现这一点,这让我想起了为什么我使用第三方测试运行程序(在我的情况下为ncrunch)。由于类似的原因,我很久以前就放弃了mstest。当然,如果您坚持使用mstest,那就不是解决方案……
Abel


使用VS 2017,令人难以置信的是,清理与VS2017相关的临时文件和localappdata文件夹,close + reload + clean解决方案以及Windows重新启动都无济于事。但是,令人惊讶的是,只有我的一个测试项目上的simlpe“卸载-重新装载”项目确实帮助测试发现停止了挂起。我不使用第三者单元测试包。
Pac0

对于某些ppl,这可能很有趣或更有意义(我不认为应该将其添加为答案):测试资源管理器中没有可用的源-github.com/Microsoft/testfx/issues/274
hB0

这可能是某人的修复程序stackoverflow.com/a/58019304/1566372
Rady

Answers:


154

令我惊讶的是,清除%TEMP%目录中的临时文件对我来说解决了这个问题。

注意:此路径通常位于 C:\Users\(yourusername)\AppData\Local\Temp

包括@ Warren-P,您可以通过%temp%进入开始菜单导航到temp文件夹,或启动“文件资源管理器”并%temp%在地址栏中输入。


30
或者,您只需%TEMP%在“开始运行”菜单中键入内容, 它便会为您找到您的temp文件夹,而您无需猜测temp的值是多少。
沃伦·P

65
@ZéCarlos任何将重要数据存储在%TEMP%目录中的应用程序都应停止工作。
Mark Pattison

25
对于您而言,这并不是一个尴尬,这是Microsoft的一次彻底失败,您必须采取如此荒谬的步骤来保持1000美元以上的IDE运行。
MushyPeas

8
在VS2017中也为我工作!
洛伦兹·韦德勒

6
如果您担心要清除整个temp目录,则仅清除Temp \ VisualStudioTestExplorerExtensions子目录似乎可以解决此问题。
Mike Walsh

90

可能是您的代码是使用x64编译的,因此必须将默认处理器体系结构启用为X64。

Test > Test Settings > Default Processor Architecture > X64

3
这咬了我几次。即使经过了这么多年,我仍然想不出为什么没有默认选择测试设置来自动匹配项目当前构建配置的充分理由。对我来说,似乎是毫无意义的重复配置。
Neutrino

1
Windows更新和/或VS更新会更改默认体系结构,而不会告诉您。...aaargh
rupweb

而4年后,这仍然很有帮助。谢谢
Oscar O.19年

67
  • 退房,如果NUnit测试适配器2/3安装在VisualStudio中。
    (Tools>Extensions and Updates )

  • 确保选择了正确的处理器体系结构:
    (Test>Test Settings>Default Processor Architecture)


2
这终于对我有用。尝试其他所有方法之后。
BradStell

甚至没有安装扩展程序时,让您觉得自己像是在第一时间在临时文件夹中闲逛的傻瓜。感谢您发布此信息。
NightOwl888 '16

2
还要检查您是否使用正确的扩展名。NUnit 2.x和NUnit 3.x有单独的一个。
pmbanka'3

1
面向.NET Standard时,实际上需要安装NuGet软件包NUnit测试适配器,而不是VSIX扩展。github.com/nunit/docs/wiki/.NET-Core-and-.NET-Standard
m93a

尝试从nuget而不是VSIX获取NUnit3TestAdapter。那是更好的方法
ravella

33

编辑2016-10-19(PowerShell脚本)

此问题仍然时不时地返回。我写了一个小PowerShell片段,为我自动清除了相关的缓存/临时文件夹/文件。我在这里分享给以后的读者:

@(
"$env:TEMP"
"$env:LOCALAPPDATA\Microsoft\UnitTest"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ComponentModelCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\Designer\ShadowCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ImageLibrary\cache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio Services\6.0\Cache"
"$env:LOCALAPPDATA\Microsoft\WebsiteCache"
"$env:LOCALAPPDATA\NuGet\Cache"
) |% { Remove-Item -Path $_ -Recurse -Force }

确保事先关闭Visual Studio,然后重新启动可能是个好主意。

删除TEMP文件夹可能不是必需的,在某些情况下甚至可能是不可取的,因此,我建议您尝试不先清除TEMP文件夹。只是省略"$env:TEMP"

原始答案2015-04-12

彻底清除与Visual Studio相关的临时/缓存文件夹后,“解决了”该问题。

由于我没有时间一步一步地检查所有内容,然后在两者之间进行测试,因此,不幸的是,我不知道是哪一个真正引起了问题。

这些是我已采取的确切步骤:

  1. 封闭的Visual Studio
  2. 使用CCleaner清除系统和浏览器temp文件/文件夹
  3. 手动清除/删除以下文件/文件夹:

    • %USERPROFILE%\AppData\Local\assembly
    • %USERPROFILE%\AppData\Local\Microsoft\UnitTest
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\Designer\ShadowCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ImageLibrary\cache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio Services\6.0\Cache
    • %USERPROFILE%\AppData\Local\Microsoft\WebsiteCache
    • %USERPROFILE%\AppData\Local\NuGet\Cache
    • %USERPROFILE%\AppData\Local\Temp

谢谢,在清除您描述的Microsoft \ VisualStudio \ 14.0 \和Microsoft \ VisualStudio Services \ 6.0 \ Cache文件夹后为我工作。
Niels van Reijmersdal 2015年

当然可以\Microsoft\VisualStudio\14.0\ImageLibrary\ImageLibrary.cache吗?
Mateen Ulhaq '16

2
我已经从%TEMP%中删除了所有内容,但它不起作用,但是当我读取'VisualStudioTestExplorerExtensions'目录(空)时,每个程序都可以正常运行:
今天

我想确认此解决方案适用于VS2015 Update 3和Resharper10。但是您需要重新启动才能看到奇迹
Quoc Nguyen

1
我仅删除了一个文件\ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ 1033 \ SpecificFolderCache.xml,它帮助您
Serhii Kuzmychov

21

出现此问题的原因之一是您的测试班不是公开的。MSTest仅从公共类中发现测试。


1
尽管这不是100%正确的,并且我可以通过非公开类进行正常工作,但在某些时候它的单元测试停止了工作。当我将单元测试课改为公开课时,它又开始工作了。去搞清楚!
SashaArz

这为我解决了。默认情况下,Visual Studio添加不带有public关键字的测试类,并且直到我将它们公开后才会看到它们。
马克·菲尔比

13

在Visual Studio 2015(更新3)中,如果要在测试资源管理器中附加测试,则必须安装NUnit测试适配器。从工具->扩展和更新->在线选项卡下载适配器(您必须搜索适配器)->下载。通过重新启动Visual Studio,您可以看到测试框架的更改。


2
按照您的指示,我搜索了“ nunit”并找到了“ NUnit 3 Test Adapter”,在“下载”(安装)之后,它解决了我的问题。在互联网上搜索此问题可在链接中
Adam Cox

在某些情况下,它比Nuget软件包管理器更好,因为它不会更改配置文件
GY_

1
@GY_,但是当您定位.NET Core或Standard时,您实际上需要NuGet软件包,请在下面检查我的答案:stackoverflow.com/a/47460221/1137334
m93a

你救了我的命!谢谢,我尝试了很多解决方案,但没有成功。我的是谷歌测试适配器。
Erman

9

我没有完整的答案,但是我通过测试项目确定了一些东西:

  1. xunit.runner.aspnet : 2.0.0-aspnet-beta4官方BETA4 aspnet5发布的,似乎是部分没有在Visual Studio的工作。
  2. 相反,使用"xunit": "2.1.0-*""xunit-runner.dnx": "2.1.0-*"包确实可以在Visual Studio中工作。
  3. 为了使VS发现测试,您的项目必须有一个名为“ test”的运行“ xunit.runner.dnx”的命令。添加其他命令可能会破坏它。
  4. 如果您的“测试资源管理器”窗口仍然最终为空,请从项目中删除“ test”命令,然后重新生成解决方案,然后将“ test”命令添加回project.json。
  5. 按照@ Fred-Kleuver的建议清除所有缓存可能会有所帮助,但是我还没有孤立地完成所有步骤,因此我不确定。

根据VS 2015 CTP 6,当前版本为Beta4版本,而不是每日版本。


1
好的,我已经确认(通过让同事尝试),上述修复不需要清除缓存或临时文件。
阿维·切里

上面说“相反,使用“ xunit”:“ 2.1.0- ”和“ xunit-runner.dnx”:“ 2.1.0- ”程序包可以在Visual Studio中工作。这行得通,谢谢!
Gillardo

顺便说一句,作为后续,从当前版本开始,VS 2015现在一切似乎都可以正常工作。无需大惊小怪就可以显示新测试或进行任何测试。
Avi Cherry

1
最后,现在有来自MS的正确指南,确切说明了将哪个版本的xunit
Avi Cherry

9

我有一个实例,其中一些测试由于async以下原因而无法进行:

public async void This_IsMy_UnitTest()

问题是我忘记让它们返回a Task而不是void在进行切换时返回。有人会认为这会导致错误或测试失败,但是不会。该类中的单元测试被完全忽略,并表现为不存在。

大约经过3次清理,构建和重新启动之后VS.NET,我才看到测试运行并失败,这表明我忘记添加Task返回类型:

public async Task This_IsMy_UnitTest()

更新后,找到了单元测试并正常工作。这可能是一个极端的情况,但是async进行await在内部使用但没有正确签名的测试可能会导致同样的问题,这不是我第一次这样做。


为我解决了这个问题!
Aimal Khan

8

转到Nuget软件包管理器,并按照以下说明下载Nunit适配器。

在此处输入图片说明


谢谢,在我的情况下,我使用了NUnitTestAdapter而不是NUnit3TestAdapter。那解决了我的问题。
像素

将NUnit3TestAdapter nuget程序包添加到解决方案或项目中,通常不会解决所有其他解决方案的问题,而只能解决已添加解决方案的问题。为了对所有解决方案/ projs普遍执行此操作,请按照stackoverflow.com/a/45748818/1300390
Umar T. Umar

6

我也有同样的问题,但是我的机器上不存在文件夹“%TEMP%\ VisualStudioTestExplorerExtensions”,因此当我阅读这些帖子时,我就有了创建它的想法,并且它可以正常工作。测试浏览器现在可以显示我的所有测试。谢谢。


6

只需重新启动 Visual Studio,然后在“测试资源管理器”中执行“全部运行”即可。然后发现了我所有的测试。


1
我还注意到,仅关闭Test Explorer并重新打开它,然后选择Run All也可以。我尚不确定它是否始终有效,但是这次却有效。
丰富

5

就我而言(Visual Studio Enterprise 2015 14.0.25425.01更新3,Resharper 2016.2),我只需要从“生成”菜单执行一个干净的解决方案。重建解决方案,然后使测试浏览器“唤醒”并再次找到所有测试。


5

我的解决方案是将NUnit 3测试适配器扩展安装到我的Visual Studio 2015中。

“扩展和更新”位于“工具”菜单下


您的答案如何为问题增加价值?你看过吗?已经有两个答案是建议完全相同的解决方案:stackoverflow.com/a/41364951/6305294stackoverflow.com/a/35043380/6305294
亚历

2
好吧,我读了第一个(即stackoverflow.com/a/41364951/6305294),但这与我的回答不同,因为这建议将NUnit Adapter nuget包添加到解决方案或项目中,这将无法解决问题。一般而言,所有其他解决方案都存在问题。关于第二个,我不得不承认我错过了。当一个问题有两个答案时,添加屏幕截图可能会吸引眼球
Umar

4

就我而言,问题出在“椅子和键盘之间”。我已切换到配置管理器中的配置,该配置不包括构建中的单元测试项目。切换回包含所有项目的配置(例如Debug)解决了该问题。


4

以我为例,VS 2015下的MSTest忽略了测试名称(即方法)长于174个字符的测试。缩短名称可以使测试可见。这是通过操作测试名称通过猜测和检查来确定的。


4

这可能对大多数人没有帮助,但是对单元测试缺乏经验的人编写了一个返回的测试方法,bool而不是void

[TestMethod]
public bool TestSomething()

更改返回类型以void解决问题。


知道返回类型会阻止测试发现仍然很有趣,但我不知道。
Fred Kleuver '16

3

确保您xunit.runner.visualstudio的测试项目packages.config中包含软件包,并且软件包已正确还原。

我知道这不是原始问题,但是可以为像我这样的人节省时间。


3

我想补充一点,我发现了与上述解决方案完全不同的解决方案。

我已经声明了我的测试课程,如下所示:

[TestClass]
class ClassificationTests
{
   //unit tests
}

public修饰符添加到类中后,它就可以按预期运行!


2

如果您以.NET Standard或.NET Core为目标,则需要使用NuGet软件包作为NUnit Test Adapter而不是extension

如果要测试.NET Core或.NET Standard项目,建议从NuGet安装适配器。VSIX适配器不也将不支持.NET Core,因为VSIX软件包不能针对多个平台。

资料来源:NUnit GitHub Wiki

还可以在此处查看常见问题解答:

我的测试未在Visual Studio 2017中显示吗?

  • 您正在使用NuGet软件包吗?
  • 您是否正在使用NuGet软件包的3.8.0或更高版本?
  • 您的测试是否针对.NET Core或整个.NET Framework?(往上看)
  • 您是否已将包参考添加到Microsoft.NET.Test.Sdk?
  • 您是否重新启动了Visual Studio?还是有点脾气。

资料来源:NUnit GitHub Wiki



1

我有同样的问题。我刚刚清理并重建了项目,就可以看到缺少的测试。


1

弹出分享我的解决方案。我使用的是Windows 10,Visual Studio 2015,NUnit 3.5,NUnit测试适配器3.6(通过NuGet(不是VISX扩展名)),但没有发现我的测试。我的问题是,在解决方案的“测试”项目中,以某种方式在项目文件夹中创建了指向“文档”文件夹的快捷方式。我猜想测试适配器正在看到快捷方式,并且挂断了试图弄清楚该怎么做的结果,从而导致无法显示单元测试。


1

删除文件\ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ 1033 \ SpecificFold‌erCache.xml为我解决了这个问题。


1

该主题有些过时,但是我针对VS2015中缺少的测试状态的解决方案:

任务状态仅显示在Debug构建配置中。当然,这也使得不可能通过test-explorer调试测试。


1

我也被这个奇妙的小功能所困扰,这里没有描述对我有用。直到我仔细检查了构建输出并注意到相关的项目都没有构建,才开始。访问配置经理证实了我的怀疑。

Visual Studio 2015很高兴地允许我添加新项目,但认为不值得构建它们。将项目添加到构建中后,它就可以很好地播放了。



1

我的项目以某种方式被设置为编译为静态库(.lib)。将其更改为动态库(.dll)后,测试Visual Studio 2012正确发现的位置。

My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type

1

我很容易解决此问题,因为:

  • 选择您的单元测试项目
  • 单击解决方案资源管理器中的“显示所有文件”按钮,新的临时文件将出现在解决方案资源管理器的文件树中的“ obj \ x86 \ Debug”中。
  • 删除这些临时文件并重建项目。
  • 尝试运行测试并成功!

1

我们有同样的问题。我们有一个大型VS 2015解决方案,其中包含多个C#项目以及更多测试项目。

Resharper的测试发现工作正常,但VS Test Explorer失败了。

事实证明,这些项目没有MsTest TestFramework和TestAdapter的相同版本,有时它们使用NuGets和其他时候的旧引用,并且显然不被支持(对于如此昂贵的IDE来说是如此)。

删除所有Microsoft.VisualStudio.Test *参考,然后添加/更新两个MSTest NuGets可以解决此问题。


1

通过意识到测试项目的目标框架与被测试项目不同,我解决了这个问题。是的,我是通过将目标框架从默认设置(“项目”>“属性”>“应用程序”)更改而导致此问题的,但对于测试项目(此项目是在几周后创建的),此操作却失败了。不匹配不会导致编译器错误,但是会在“ 错误列表”窗口中导致警告。一旦选择显示警告的选项,解决方案就显而易见了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.