ChatGPT解决这个技术问题 Extra ChatGPT

Visual Studio 2015 或 2017 未发现单元测试

编辑 2016-10-19:

最初的问题是关于带有 XUnit 测试运行器的 VS2015 CTP6 特有的问题。从答案中可以清楚地看出,Visual Studio 中的单元测试发现存在一个更广泛的问题,可能会在许多不同的情况下发生。我已经清理了我的问题以反映这一点。

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

许多其他答案也被证明有助于更好地理解 VS 测试运行器的复杂性。我很欣赏人们仍在分享他们的解决方案!

原始问题2015-04-10:

从昨天开始,我的 Visual Studio 测试资源管理器不会发现我的任何项目的测试。它也不会在构建后显示绿色加载条。

当我转到 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 Pro Technical Preview 上运行 Visual Studio 2015 CTP 6,构建 10041。.NET Framework 版本似乎无关紧要 - 它发生在 4.04.5.24.6

我尝试了以下测试框架,它们都给出了相同的行为:

Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0

xunit v2.1.0-beta1-build2945 与 xunit.runner.visualstudio v2.1.0-beta1-build1051

NUnit v2.6.4 和 NUnitTestAdapter v2.0.0

我在 GitHub (xunit) 上发现了一个类似的问题:Cannot get tests discovered #295,xunit 团队的评论如下:

请注意,据报道,Visual Studio 2015 CTP 5 已被许多进行一般单元测试的人(不仅仅是 xUnit.net)破坏,所以不要指望它会起作用。此外,请确保您已清除 Visual Studio 的运行器缓存。如果它被损坏,Visual Studio 将永久行为不端,直到它被删除。要清除缓存,请关闭 Visual Studio 的所有实例,然后删除文件夹 %TEMP%\VisualStudioTestExplorerExtensions(老实说,删除 %TEMP% 中可以删除的所有内容可能不会有什么坏处)。

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

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

必须有某种临时或缓存文件夹我需要清除,但我知道 Visual Studio 有很多,并不是所有的都可以删除而不会产生不必要的副作用。

我很高兴我偶然发现了这一点,它让我想起了为什么我使用 3rd 方测试运行器(在我的例子中是 ncrunch)。由于类似的原因,我很久以前就放弃了 mstest。当然,如果你被 mstest 卡住了,那就没有办法了……
使用 VS 2017,令人难以置信的是,清理我的 temp 和 localappdata VS2017 相关文件夹,关闭 + 重新加载 + 清理解决方案和 Windows 重启并没有帮助。然而,令人惊讶的是,仅在我的一个测试项目上的一个简单的“卸载 - 重新加载”项目确实帮助测试发现停止挂起。我不使用 3rd 方单元测试包。
对于某些人来说,这可能更有趣或更相关(我认为我不应该将其添加为答案):测试资源管理器中没有可用的源 - github.com/Microsoft/testfx/issues/274
这可能是对某人 stackoverflow.com/a/58019304/1566372 的修复

I
Igor

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

注意:此路径一般在 C:\Users\(yourusername)\AppData\Local\Temp

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


或者您只需在“开始运行”菜单中输入 %TEMP%,它就会为您找到您的临时文件夹,而无需您猜测 temp 的值是什么。
@ZéCarlos 任何将重要数据存储在 %TEMP% 目录中的应用程序都应该停止工作。
这对你来说并不尴尬,微软彻底失败了,你必须采取如此荒谬的步骤来保持 1000 美元以上的 IDE 运行。
在 VS2017 中也为我工作!
如果您担心清除整个临时目录,则仅清除 Temp\VisualStudioTestExplorerExtensions 子目录似乎可以解决问题。
R
RJFalconer

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

Test > Test Settings > Default Processor Architecture > X64

这咬了我好几次。即使经过这么多年,我仍然想不出一个很好的理由为什么默认情况下不选择测试设置来自动匹配项目的当前构建配置。对我来说,这似乎是毫无意义的重复配置。
Windows 更新和/或 VS 更新更改了默认架构而不告诉你.... aaargh
4年后,这仍然很有帮助。谢谢
M
MichiBack

检查是否在 VisualStudio 中安装了 NUnit 测试适配器 2/3。 (工具>扩展和更新)

确保选择了正确的处理器架构:(测试>测试设置>默认处理器架构)


这最终对我有用。在尝试了其他一切之后。
甚至在未安装扩展程序时,让您觉得自己像个傻瓜一样先在临时文件夹中挖掘。感谢您发布此信息。
还要检查您是否使用了正确的扩展名。 NUnit 2.x 和 NUnit 3.x 有一个单独的版本。
当您以 .NET Standard 为目标时,您实际上需要安装 NuGet 包 NUnit 测试适配器 而不是 VSIX 扩展。 github.com/nunit/docs/wiki/.NET-Core-and-.NET-Standard
尝试从 nuget 而不是 VSIX 获取 NUnit3TestAdapter。这是更好的方法
F
Fred Kleuver

编辑 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 相关的临时/缓存文件夹后,该问题已“解决”。

由于我没有时间逐一检查所有内容然后在中间进行测试,因此很遗憾,我不知道究竟是哪一个导致了问题。

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

关闭 Visual Studio 使用 CCleaner 清除系统和浏览器临时文件/文件夹 手动清除/删除以下文件/文件夹: %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 文件夹后为我工作。
你的意思是\Microsoft\VisualStudio\14.0\ImageLibrary\ImageLibrary.cache
我已经从 %TEMP% 中删除了所有内容,但它不起作用,但是当我读取“VisualStudioTestExplorerExtensions”目录(空)时,一切都可以正常工作:-)(当天底部有该解决方案的答案)
我想确认此解决方案适用于 VS2015 Update 3 和 Resharper 10。但您需要重新启动才能看到奇迹
我只删除了一个文件 \AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml 它hepls
A
AfshinS

这个问题的一个原因是您的测试类不是公开的。 MSTest 仅从公共类中发现测试。


虽然这不是 100% 正确的,而且我的非公开课程运行良好,但在某些时候它的单元测试停止工作。当我将单元测试类更改为公开时,它又开始工作了。去搞清楚!
这为我解决了。默认情况下,Visual Studio 添加不带 public 关键字的测试类,在我将它们公开之前它不会看到它们。
P
Pankti Shah

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


按照您的指示,我搜索“nunit”并找到“NUnit 3 测试适配器”,在“下载”(安装)之后解决了我的问题。在 Internet 上搜索此问题可在 link 找到其他 SO 文章
在某些情况下,这比 Nuget 包管理器要好,因为它不会更改配置文件
@GY_ 但是当您以 .NET Core 或 Standard 为目标时,您实际上需要 NuGet 包,请在下面查看我的答案:stackoverflow.com/a/47460221/1137334
你救了我的命!谢谢,我尝试了很多解决方案,但没有奏效。我的是谷歌测试适配器。
A
Avi Cherry

我对此没有完整的答案,但我通过玩一个测试项目确定了一些事情:

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

这是根据 VS 2015 CTP 6 的最新版本,使用 beta4 版本,而不是样片。


好的,我已经确认(通过让同事尝试)上述修复不需要清除任何缓存或临时文件。
上面说“相反,使用“xunit”:“2.1.0-”和“xunit-runner.dnx”:“2.1.0-”包确实可以在Visual Studio中工作。”。这行得通,谢谢!
顺便说一句,作为后续,从当前版本开始,现在在 VS 2015 中一切似乎都运行良好。无需大惊小怪就可以显示新的测试或任何东西。
最后,现在有一个来自 MS 的正确指南,关于哪些版本的 xunit 与哪些版本的 DNX 一起使用,这里:xunit.github.io/docs/getting-started-dnx.html
M
Michael Freidgeim

我有一个实例,其中一些测试不会被选中,因为我将它们 async 设置为如下所示:

public async void This_IsMy_UnitTest()

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

在大约 3 次 clean and builds + restarting VS.NET 之后,我才看到测试运行并失败,表明我忘记添加 Task 返回类型:

public async Task This_IsMy_UnitTest()

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


为我解决了问题!
D
Debendra Dash

转到 Nuget 包管理器并下载 Nunit Adapter,如下所示。

https://i.stack.imgur.com/jd8b7.jpg


谢谢,就我而言,我有 NUnitTestAdapter 而不是 NUnit3TestAdapter。这解决了我的问题。
将 NUnit3TestAdapter nuget 包添加到解决方案或项目中通常不会解决所有其他解决方案的问题,而仅适用于已添加它的解决方案。为了对所有解决方案/projs 执行此操作,请将 NUnit 3 测试适配器扩展添加到您的 Visual Studio,如 stackoverflow.com/a/45748818/1300390 中所述
V
Vinci

我有相同的 pronlem,但我的机器上不存在文件夹“%TEMP%\VisualStudioTestExplorerExtensions”,所以当我阅读帖子时,我有了创建它的想法并且它可以工作。测试资源管理器现在能够显示我的所有测试。谢谢。


l
lukyer

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


我还注意到关闭测试资源管理器并重新打开它并选择 Run All 也可以。我不确定它是否总是有效,但这次有效。
s
sammy34

在我的情况下(Visual Studio Enterprise 2015 14.0.25425.01 Update 3,Resharper 2016.2)我只需要从 Build 菜单中做一个干净的解决方案。重建解决方案然后导致测试资源管理器“唤醒”并再次找到所有测试。


U
Umar T.

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

https://i.stack.imgur.com/m46iR.jpg


您的回答如何为问题增加价值?你读过它们吗?已经有两个答案推荐完全相同的解决方案:stackoverflow.com/a/41364951/6305294stackoverflow.com/a/35043380/6305294
好吧,我读了第一个(即 stackoverflow.com/a/41364951/6305294),但这与我的答案不同,因为它建议将 NUnit Adapter nuget 包添加到解决方案或项目中,这不会修复一般所有其他解决方案的问题。至于第二个,我不得不承认我错过了。当一个问题有两个很多答案时,添加屏幕截图可能有助于吸引眼球
A
AndyZez

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


K
Kenneth K.

就我而言,VS 2015 下的 MSTest 忽略了测试(即方法)名称超过 174 个字符的测试。缩短名称使测试可见。这是通过操纵测试名称进行猜测和检查来确定的。


S
Sam

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

[TestMethod]
public bool TestSomething()

将返回类型更改为 void 解决了该问题。


知道返回类型会阻止测试发现仍然很有趣,我不知道。
p
pvasek

确保您的测试项目 packages.config 中有 xunit.runner.visualstudio 包,并且该包已正确恢复。

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


S
ScottishTapWater

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

我已将我的测试类声明如下:

[TestClass]
class ClassificationTests
{
   //unit tests
}

一旦我将 public 修饰符添加到类中,它就按预期工作了!


p
pehur

这个话题有些过时了,但是我对VS2015中缺少测试状态的解决方案:

任务状态仅显示在调试构建配置上。当然,这也使得无法通过测试资源管理器调试您的测试。


M
Maate

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

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

这也是我的问题。但是,我想使用一个库并想知道如何使它工作。
C
Community

如果您的目标是 .NET Standard 或 .NET Core,则需要将 NuGet 包用于 NUnit 测试适配器,而不是扩展。

如果您正在测试 .NET Core 或 .NET Standard 项目,建议从 NuGet 安装适配器。 VSIX 适配器不支持,也不会支持 .NET Core,因为 VSIX 包不能面向多个平台。

来源:NUnit GitHub Wiki

.

还可以在那里查看常见问题解答:

我的测试没有显示在 Visual Studio 2017 中?你在使用 NuGet 包吗?您使用的是 3.8.0 版或更高版本的 NuGet 包吗?您的测试是针对 .NET Core 还是完整的 .NET Framework? (见上文)您是否添加了对 Microsoft.NET.Test.Sdk 的包引用?您是否重新启动了 Visual Studio?还是有点脾气的。

来源:NUnit GitHub Wiki


O
Ohad Schneider

这发生在我身上,因为我的测试项目包含一个 app.config。它是由 NuGet 包自动添加的,用于程序集重定向,但没有它我的测试似乎运行良好。

请参阅:https://developercommunity.visualstudio.com/comments/42858/view.html


E
Eric

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


T
Thomas Parikka

弹出来分享我的解决方案。我使用的是 Windows 10、Visual Studio 2015、NUnit 3.5、NUnit 测试适配器 3.6(通过 NuGet,而不是 VISX 扩展),并且没有发现我的任何测试。我的问题是,在我的解决方案的测试项目中,以某种方式在项目文件夹中创建了我的“文档”文件夹的快捷方式。我猜测试适配器看到了快捷方式并挂断了试图弄清楚如何处理它,导致无法显示单元测试。


d
der_chirurg

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


R
Robbie Dee

我也被这个美妙的小功能所吸引,这里描述的没有任何东西对我有用。直到我仔细检查了构建输出并注意到相关项目没有被构建。访问配置管理器证实了我的怀疑。

Visual Studio 2015 愉快地允许我添加新项目,但认为不值得构建它们。一旦我将项目添加到构建中,它就开始运行良好。


P
Pouyan Sepahvand

我通过将 X64 更改为:右键单击项目 -> 属性 -> 构建 -> 平台目标 -> 任何 CPU 来解决它


m
mggSoft

我很容易解决这个问题:

选择您的单元测试项目

单击解决方案资源管理器中的“显示所有文件”按钮,新的临时文件出现在解决方案资源管理器的文件树中的“obj\x86\Debug”中。

删除这些临时文件并重建项目。

重试运行测试并工作!


T
TommyD

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

Resharper 的测试发现工作得很好,但 VS 测试资源管理器惨败。

事实证明,这些项目没有相同版本的 MsTest TestFramework 和 TestAdapter,而且有时他们使用 NuGet 和其他时候很好的旧参考,而且显然不支持(对于如此昂贵的 IDE 来说太多了)。

删除所有 Microsoft.VisualStudio.Test* 引用,然后添加/更新两个 MSTest NuGet 解决了该问题。


J
JerryM

通过意识到我的测试项目的目标框架与被测项目不同,我解决了这个问题。是的,我通过更改默认的目标框架(项目>属性>应用程序)导致了这个问题,但是对于几周后创建的测试项目来说,这并没有做到这一点。不匹配不会导致编译器错误,但会导致“错误列表”窗口中出现警告。一旦我选择了显示警告的选项,解决方案就很明显了。