编辑 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.0
、4.5.2
和 4.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 有很多,并不是所有的都可以删除而不会产生不必要的副作用。
令我惊讶的是,清除位于 %TEMP%
目录中的临时文件为我解决了这个问题。
注意:此路径一般在 C:\Users\(yourusername)\AppData\Local\Temp
包括@Warren-P,您可以通过在“开始”菜单中输入 %temp%
导航到临时文件夹,或启动“文件资源管理器”并在地址栏中输入 %temp%
。
可能是您的代码是使用 x64 编译的,因此必须将默认处理器架构启用为 X64。
Test > Test Settings > Default Processor Architecture > X64
检查是否在 VisualStudio 中安装了 NUnit 测试适配器 2/3。 (工具>扩展和更新)
确保选择了正确的处理器架构:(测试>测试设置>默认处理器架构)
编辑 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\ImageLibrary\ImageLibrary.cache
?
这个问题的一个原因是您的测试类不是公开的。 MSTest 仅从公共类中发现测试。
在 Visual Studio 2015(更新 3)中,如果您想在测试资源管理器中附加测试,则必须安装 NUnit 测试适配器。从工具->扩展和更新->在线选项卡下载适配器(您必须搜索适配器)-> 下载。通过重新启动 Visual Studio,您可以看到测试框架的更改。
我对此没有完整的答案,但我通过玩一个测试项目确定了一些事情:
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 版本,而不是样片。
我有一个实例,其中一些测试不会被选中,因为我将它们 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
测试但签名不正确可能会导致同样的问题,这不是我第一次这样做。
转到 Nuget 包管理器并下载 Nunit Adapter,如下所示。
https://i.stack.imgur.com/jd8b7.jpg
我有相同的 pronlem,但我的机器上不存在文件夹“%TEMP%\VisualStudioTestExplorerExtensions”,所以当我阅读帖子时,我有了创建它的想法并且它可以工作。测试资源管理器现在能够显示我的所有测试。谢谢。
只需重新启动 Visual Studio 并在测试资源管理器中执行“全部运行”...然后发现我的所有测试。
在我的情况下(Visual Studio Enterprise 2015 14.0.25425.01 Update 3,Resharper 2016.2)我只需要从 Build 菜单中做一个干净的解决方案。重建解决方案然后导致测试资源管理器“唤醒”并再次找到所有测试。
我的解决方案只是将 NUnit 3 测试适配器扩展安装到我的 Visual Studio 2015。
https://i.stack.imgur.com/m46iR.jpg
就我而言,问题是“在椅子和键盘之间”。我已切换到配置管理器中的配置,该配置不包括我在构建时的单元测试项目。切换回包含所有项目的配置(例如调试)修复了该问题。
就我而言,VS 2015 下的 MSTest 忽略了测试(即方法)名称超过 174 个字符的测试。缩短名称使测试可见。这是通过操纵测试名称进行猜测和检查来确定的。
这可能对大多数人没有帮助,但是没有单元测试经验的人编写了一个返回 bool
而不是 void
的测试方法:
[TestMethod]
public bool TestSomething()
将返回类型更改为 void
解决了该问题。
确保您的测试项目 packages.config 中有 xunit.runner.visualstudio
包,并且该包已正确恢复。
我知道这不是原始问题的情况,但是它可以为像我这样的人节省时间。
我只想补充一点,我找到了与上述解决方案完全不同的解决方案。
我已将我的测试类声明如下:
[TestClass]
class ClassificationTests
{
//unit tests
}
一旦我将 public
修饰符添加到类中,它就按预期工作了!
这个话题有些过时了,但是我对VS2015中缺少测试状态的解决方案:
任务状态仅显示在调试构建配置上。当然,这也使得无法通过测试资源管理器调试您的测试。
不知何故,我的项目被设置为编译为静态库 (.lib)。将其更改为动态库 (.dll) 后,测试 Visual Studio 2012 正确发现的位置。
My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type
如果您的目标是 .NET Standard 或 .NET Core,则需要将 NuGet 包用于 NUnit 测试适配器,而不是扩展。
如果您正在测试 .NET Core 或 .NET Standard 项目,建议从 NuGet 安装适配器。 VSIX 适配器不支持,也不会支持 .NET Core,因为 VSIX 包不能面向多个平台。
.
还可以在那里查看常见问题解答:
我的测试没有显示在 Visual Studio 2017 中?你在使用 NuGet 包吗?您使用的是 3.8.0 版或更高版本的 NuGet 包吗?您的测试是针对 .NET Core 还是完整的 .NET Framework? (见上文)您是否添加了对 Microsoft.NET.Test.Sdk 的包引用?您是否重新启动了 Visual Studio?还是有点脾气的。
这发生在我身上,因为我的测试项目包含一个 app.config
。它是由 NuGet 包自动添加的,用于程序集重定向,但没有它我的测试似乎运行良好。
请参阅:https://developercommunity.visualstudio.com/comments/42858/view.html。
我有同样的问题。我刚刚清理并重建了项目,我能够看到缺少的测试。
弹出来分享我的解决方案。我使用的是 Windows 10、Visual Studio 2015、NUnit 3.5、NUnit 测试适配器 3.6(通过 NuGet,而不是 VISX 扩展),并且没有发现我的任何测试。我的问题是,在我的解决方案的测试项目中,以某种方式在项目文件夹中创建了我的“文档”文件夹的快捷方式。我猜测试适配器看到了快捷方式并挂断了试图弄清楚如何处理它,导致无法显示单元测试。
删除文件 \AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml 为我解决了这个问题。
我也被这个美妙的小功能所吸引,这里描述的没有任何东西对我有用。直到我仔细检查了构建输出并注意到相关项目没有被构建。访问配置管理器证实了我的怀疑。
Visual Studio 2015 愉快地允许我添加新项目,但认为不值得构建它们。一旦我将项目添加到构建中,它就开始运行良好。
我通过将 X64 更改为:右键单击项目 -> 属性 -> 构建 -> 平台目标 -> 任何 CPU 来解决它
我很容易解决这个问题:
选择您的单元测试项目
单击解决方案资源管理器中的“显示所有文件”按钮,新的临时文件出现在解决方案资源管理器的文件树中的“obj\x86\Debug”中。
删除这些临时文件并重建项目。
重试运行测试并工作!
我们遇到了同样的问题。我们有一个大型 VS 2015 解决方案,其中包含多个 C# 项目以及更多测试项目。
Resharper 的测试发现工作得很好,但 VS 测试资源管理器惨败。
事实证明,这些项目没有相同版本的 MsTest TestFramework 和 TestAdapter,而且有时他们使用 NuGet 和其他时候很好的旧参考,而且显然不支持(对于如此昂贵的 IDE 来说太多了)。
删除所有 Microsoft.VisualStudio.Test* 引用,然后添加/更新两个 MSTest NuGet 解决了该问题。
通过意识到我的测试项目的目标框架与被测项目不同,我解决了这个问题。是的,我通过更改默认的目标框架(项目>属性>应用程序)导致了这个问题,但是对于几周后创建的测试项目来说,这并没有做到这一点。不匹配不会导致编译器错误,但会导致“错误列表”窗口中出现警告。一旦我选择了显示警告的选项,解决方案就很明显了。
%TEMP%
,它就会为您找到您的临时文件夹,而无需您猜测 temp 的值是什么。%TEMP%
目录中的应用程序都应该停止工作。