首页 文章

Visual Studio 2015或2017不会发现单元测试

提问于
浏览
147

EDIT 2016-10-19:

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

我还在我自己的答案中加入了一个脚本,我今天仍然使用它来解决出现时出现的类似问题 .

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


Original question 2015-04-10:

从昨天开始,我的Visual Studio Test Explorer将不会发现任何项目的测试 . 建筑后也没有显示绿色装载栏 .

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

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-build2945xunit.runner.visualstudio v2.1.0-beta1-build1051

  • NUnit v2.6.4NUnitTestAdapter 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实际上 is 能够发现一些测试 . 它仅适用于VS和NUnit测试,不适用于xunit .

我需要清除某种临时文件或缓存文件夹,但我知道Visual Studio中有很多文件夹,并且并非所有这些文件夹都可以删除而没有不必要的副作用 .

30 回答

  • 1

    确保您的测试项目packages.config中包含 xunit.runner.visualstudio 包,并且还正确还原了该包 .

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

  • 4

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

    见:https://developercommunity.visualstudio.com/comments/42858/view.html .

  • 80

    我也被这个精彩的小功能所困扰,这里没有任何描述对我有用 . 直到我仔细检查了构建输出并注意到相关内容项目没有建成 . 访问配置管理员证实了我的怀疑 .

    Visual Studio 2015很高兴地允许我添加新项目,但认为不值得构建它们 . 一旦我将项目添加到构建中,它就开始很好地播放了 .

  • 4

    确保具有 [TestClass] 属性的类是公共的而不是私有的 .

  • 140

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

  • 16

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

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

    如果包含@ Warren-P,您可以通过在开始菜单中输入 %temp% 导航到临时文件夹,或者启动"File Explorer"并在地址栏中输入 %temp% .

  • 5

    我有一个实例,其中一些测试不会被拾取,因为我已经使它们像以下一样 async

    public async void This_IsMy_UnitTest()

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

    它不是在大约3次清理并且构建重新启动 VS.NET 之后我看到测试运行并且失败表明我忘了添加 Task 返回类型:

    public async Task This_IsMy_UnitTest()

    更新后,单元测试被找到并正常工作 . 这可能是一个边缘情况,但是使用 await 但是没有签名正确的 async 测试可能会导致同样的问题,并且_562706已完成此操作 .

  • 1

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

  • 29

    转到Nuget包管理器并下载Nunit适配器,如下所示 .

    enter image description here

  • 2

    不知怎的,我的项目被设置为 Static Library (.lib) 编译 . 将此更改为 Dynamic Library (.dll) 后,测试Visual Studio 2012正确发现的位置 .

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

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

    [TestMethod]
    public bool TestSomething()
    

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

  • 0

    就我而言(Visual Studio Enterprise 2015 14.0.25425.01 Update 3,Resharper 2016.2)我只需要从Build菜单中执行 clean solution . 重建解决方案然后使测试资源管理器"wake up"并再次找到所有测试 .

  • 60

    如果您的目标是.NET Standard或.NET Core,则需要将 the NuGet package 用于NUnit Test Adapter和 not the extension .

    如果您正在测试.NET Core或.NET Standard项目,建议从NuGet安装适配器 . VSIX适配器不支持.NET Core,也不支持.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

  • 3

    只需 restart Visual Studio并在测试资源管理器中执行"Run All" ...然后我会发现所有测试 .

  • 3

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

  • 1

    我的解决方案就是将 NUnit 3 Test Adapter 扩展安装到我的Visual Studio 2015中 .

    'Extensions and Updates' is present under 'Tools' meue

  • 0

    此问题的一个原因是您的测试类不公开 . MSTest只发现公共类的测试 .

  • 1

    弹出来分享我的解决方案 . 我在Windows 10,Visual Studio 2015,NUnit 3.5,NUnit测试适配器3.6(通过NuGet,而不是VISX扩展),我的测试都没有被发现 . 我的问题是,在我的解决方案的测试项目中,不知何故,在项目文件夹中创建了我的“Documents”文件夹的快捷方式 . 我猜测测试适配器正在看快捷方式,并试图弄清楚如何处理它,导致无法显示单元测试 .

  • 0

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

  • 3

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

    我已经宣布我的测试类如下:

    [TestClass]
    class ClassificationTests
    {
       //unit tests
    }
    

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

  • 9

    我正在为VSTest框架和我的原生单元测试遇到同样的问题 .

    因此,在完成之前提到的所有事情后,我删除了解决方案目录路径中出现的每个'#'符号 . 它确实有效 .

    我将它留在这里为将来会发现这个问题的googlers .

  • 1

    在Visual Studio 2015(Update 3)中,如果要在测试资源管理器中附加测试,则必须安装 NUnit Test Adapter . 从 Tools->Extension And Updates->Online tab(you have to search for the adapter)->Download 下载适配器 . 通过重新启动Visual Studio,您可以看到测试框架的更改 .

  • 9

    这个主题有点过时了,但我在VS2015中解决了缺少的测试状态:

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

  • 7

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

  • 0

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

  • 5

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

    Test > Test Settings > Default Processor Architecture > X64
    
  • 1

    编辑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清除系统和浏览器 temp 文件/文件夹

    • 手动清除/删除以下文件/文件夹:

    • %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

  • 11

    我很容易将问题解决为:

    • 选择您的单元测试项目

    • 单击解决方案资源管理器中的'Show All Files'按钮,新的临时文件出现在'obj\x86\Debug'内的解决方案资源管理器的文件树中 .

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

    • Retried运行测试并且工作!

  • 1
    • 如果在VisualStudio中安装了NUnit Test Adapter 2/3,请检查 .
      (Tools>Extensions and Updates )

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

  • 3

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

    • 似乎是官方beta4 aspnet5版本的一部分的 xunit.runner.aspnet : 2.0.0-aspnet-beta4 在Visual Studio中不起作用 .

    • 而是使用 "xunit": "2.1.0-*""xunit-runner.dnx": "2.1.0-*" 包在Visual Studio中工作 .

    • 为了让VS发现测试,您的项目必须有一个名为"test"的SINGLE命令,它运行"xunit.runner.dnx" . 添加其他命令可能会破坏它 .

    • 如果您的测试资源管理器窗口仍然为空,请从项目中删除"test"命令,然后重新构建解决方案,然后将"test"命令添加回project.json .

    • 根据@ Fred-Kleuver清除所有缓存's suggestion may help, but I haven' t单独完成所有步骤,所以我不确定 .

    根据VS 2015 CTP 6,这是最新的,使用beta4版本,而不是日报 .

相关问题