【问题标题】:Why is the Visual Studio 2015/2017/2019 Test Runner not discovering my xUnit v2 tests为什么 Visual Studio 2015/2017/2019 测试运行程序没有发现我的 xUnit v2 测试
【发布时间】:2016-05-08 07:48:11
【问题描述】:

更新:添加 2019;发现/运行器集成机制与 2017 年和 2015 年相同,因此可能出错的关键问题是相同的。


我已经阅读了Why is the xUnit runner not finding my tests, which covers reasons xUnit would never be able to find your tests,但我的问题有所不同——我相信我的测试没有任何微妙之处; (他们曾在其他环境中工作过,这似乎只是我的机器) - Visual Studio 2015 [社区版] 中的 Visual Studio 测试运行程序根本没有显示我的任何测试。我没有做任何令人兴奋的事情;测试针对桌面上的 xUnit.net v2。

我查看了“输出”窗口,但在 显示来自 选项卡的输出的 测试 下根本看不到任何内容。

【问题讨论】:

标签: .net visual-studio unit-testing visual-studio-2015 xunit2


【解决方案1】:

希望我的回答对你们中的一些人有所帮助: 在大多数情况下,当我的单元测试未被发现时,我不得不将测试类访问修饰符更改为 public。添加新类(Shift+Alt+C)时,默认访问修饰符是内部的,大多数时候我忘记更改它。

【讨论】:

【解决方案2】:

打开输出 -> 测试并查看错误是什么。就我而言,我收到了以下错误消息:

The framework 'Microsoft.AspNetCore.App', version '5.0.0' (x64) was not found.

安装 .Net SDK 5.0 后,测试立即生效:https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.402-windows-x64-installer

【讨论】:

    【解决方案3】:

    右键单击测试项目并选择属性。 将 Target 框架属性从 1.1 更改为其他内容(我使用的是 3.1),并且所有内容都将运行为 1.1 不再涵盖:P

    【讨论】:

    • 谢谢,我一有机会就去看看。如果有效,会通知您。
    【解决方案4】:

    在属性窗口中检查 test.cs 文件的类型,它是 c# 编译器。就我而言,我不小心将其更改为嵌入资源并遇到了这个问题。

    【讨论】:

    • 这将阻止它在任何机器上工作(OP 排除了此类原因);此类原因在stackoverflow.com/questions/16214684/… 中进行了编目 - 请您将答案放在那里吗?
    • 我同意,但这是我在我的场景中所面临的,没有一个对我有用,最后意识到我不小心改变了。我知道这是非常罕见的情况,但发生在我身上
    • 是的,但请将其记录为对此问题中链接的其他问题的答案!它回答了这个问题,它没有回答这个问题。这个问题说“它适用于所有人,但它可能是什么”。另一个说“无论我做什么,我的测试都不起作用”
    【解决方案5】:

    请确保您没有在 .NET Standard 2.0 类库中编写单元测试。在撰写本文时,visualstudio 运行程序不支持在 netstandard2.0 类库中运行测试。

    Check here 用于测试运行器兼容性矩阵:

    https://xunit.net

    【讨论】:

    • 两个链接都失效了。
    • @joelmdev 感谢您的评论。我更新了它们
    【解决方案6】:

    对我来说就这么简单——包含测试方法的类必须是public。 :)

    【讨论】:

    • 此解决方案已发布on this page。请不要添加重复项。
    • 嗨,我在问题的开头排除了这个原因 - 这个:stackoverflow.com/questions/16214684/… 是一个类似的原因,它为什么对任何人都不起作用。这个问题是关于“为什么在我的机器上不起作用,它通常可以工作”?!
    【解决方案7】:

    将您的测试类设为公开并添加注释为 [TestClass]

    【讨论】:

    • 请删除 - 这个问题是关于 xunit 的,即使它提到了 Xunit 属性,也排除在问题中
    【解决方案8】:
    1. 从您的查询中消除发现异常;转到输出窗口 (Ctrl-Alt-O),然后将 show output from 下拉列表 (Shift-Alt-S) 切换到 Tests 并确保没有发现例外情况

    2. 测试|测试设置|默认处理器架构 如果您的测试是 x86/x64 特定的并且发现正在触发与 bittedness 相关的异常,即不是 AnyCpu,则可以提供帮助

    3. As suggested in this answer(upvote it if the technique helps) 运行桌面控制台运行程序 (instructions) 可以很好地交叉检查以消除其他可能性,例如损坏的配置文件:-

      packages\xunit.runner.console.2.2.0\tools\xunit.console <tests.dll>

      注意 xunit.runner.console 包已弃用 - 当您在 VS 中工作时,您也可以让 dotnet test 在 CI 上下文中运行它们


    Go read the documentation - 它是全面的、最新的,包括故障排除信息并需要 PR:-

    重要提示:如果您之前安装了 xUnit.net Visual Studio Runner VSIX(扩展),则必须先将其卸载。 Visual Studio 运行程序现在仅通过 NuGet 分发。要删除它,请转到 工具 > 扩展和更新。滚动到列表底部,如果安装了 xUnit.net,请将其卸载。这将强制您重新启动 Visual Studio。

    如果您在发现或运行测试时遇到问题,您可能是 Visual Studio 中运行程序缓存损坏的受害者。要清除此缓存,请关闭 Visual Studio 的所有实例,然后删除文件夹 %TEMP%\VisualStudioTestExplorerExtensions。还要确保您的项目仅链接到单个版本的 Visual Studio 运行程序 NuGet 包 (xunit.runner.visualstudio)。

    以下步骤对我有用:

    1. (仅当您怀疑您的机器上存在严重混乱时 - 通常更常见的情况是尚未安装 Visual Studio 集成)

      按照建议执行DEL %TEMP%\VisualStudioTestExplorerExtensions:-

      PS> del $env:TEMP\VisualStudioTestExplorerExtensions

    2. 在所有测试项目中安装 NuGet 包xunit.runner.visualstudio

      • 包:

        .paket\paket add nuget xunit.runner.visualstudio -i
        

        您需要在 paket.dependencies 中填写以下内容:

        nuget xunit.runner.visualstudio version_in_path: true

        注意version_in_path: true 位很重要

      • Nuget:转到包管理器控制台(Alt-T、N、O)和

        Install-Package xunit.runner.visualstudio)
        

      重建以确保xunit.runner 最终出现在输出目录中

    3. 关闭测试资源管理器

    4. 重新打开测试资源管理器(Alt-S,W,T)

    5. 运行所有测试(Ctrl R、A)

    【讨论】:

    • "关闭测试资源管理器
    • xunit VS 跑步者正在为我的 sln 工作。然而,有一天它不再出现了。发现我没有安装运行的 VS,它可能是因为缓存,它是由另一个安装了 runner 的 sln 留下的。安装跑步者后,一切又正常了。所以不要忘记为每个 sln 安装 runner。
    • 这太不可思议了。删除包含其他三个空文件夹的文件夹解决了这个问题。
    • @martinJH 我对此有一个自我回答(在 OP 中链接):- stackoverflow.com/questions/16214684/… ;) 虽然没有透露我是如何发现的
    • 真的很奇怪,但删除%TEMP%\VisualStudioTestExplorerExtensions并重新启动VS终于奏效了!
    【解决方案9】:

    确保您的测试类是public

    【讨论】:

    • 这在第一个附带条件中明确解决(我链接了另一个涵盖该案例的问题);此 Q+A 仅是关于故障排除在其他地方正常工作的 OK 测试在给定环境中现在如何不适用于现在的某人。对我来说,这个答案只会使事情变得混乱,因为它会稀释这种独特性。
    • 这就是我的问题所在。谢谢!
    【解决方案10】:

    以上解决方案都不适合我(dotnetcore 1.1,VS2017)。这是修复它的原因:

    1. 添加 NuGet 包Microsoft.TestPlatform.TestHost
    2. 添加 NuGet 包Microsoft.NET.Test.Sdk

    这些是除了我之前安装的这些软件包:

    • xunit (2.3.0-beta1-build3642)
    • xunit.runner.visualstudio (2.3.0-beta1-build1309)

    【讨论】:

    • 这对我有帮助,我缺少 xunit.runner.visualstudio 包。
    • 只有在从 VS 2017 迁移到 VS 2019 时,我的 .NET 4.72 MS 测试项目才需要 TestPlatform.TestHost
    • 这为我解决了。在输出窗口中,从下拉列表中选择测试 => 查看消息“缺少 TestHost”消息。
    【解决方案11】:
    1. 关闭所有 Visual Studio 实例
    2. 转到 %TEMP%\VisualStudioTestExplorerExtensions\
    3. 删除 specrun 相关文件夹
    4. 再试一次

    告诉我,谢谢

    【讨论】:

      【解决方案12】:

      我在使用 Visual Studio 2019 时遇到了同样的问题。刚刚安装了以下 NuGet 包,问题就解决了。

      1)。 xUnit

      2)。 xunit.runner.visualstudio

      3)。 Microsoft.TestPlatform.TestHost

      4)。 Microsoft.NET.Test.Sdk

      【讨论】:

        【解决方案13】:

        这是对我们有用的解决方案。不是最好的,但也许可以从中受益。

        背景:

        • 我们的脚本是使用 VS 2013 开发的,并使用 NUnit VS Adapter 2.1..
        • 最近我们迁移到 VS 2017,当打开相同的解决方案时 - 测试不会显示在测试资源管理器中

        在构建时我们会看到这条消息:

        [Informational] NUnit Adapter 3.10.0.21: Test discovery starting
        [Informational] Assembly contains no NUnit 3.0 tests: C:\ihealautomatedTests\SeleniumTest\bin\x86\Debug\SeleniumTest.dll
        [Informational] NUnit Adapter 3.10.0.21: Test discovery complete
        

        解决方案(临时):

        • 卸载 NUnit 适配器 3.10...
        • 安装 NUnit VS Adapter 2.1..

        现在显示测试。

        【讨论】:

        • 请将您的(至少看似)新问题提取到其自己的帖子中,以使其成为明确的答案:)
        • ... 标题为“为什么 NUnit TestAdapter v3 没有看到我的 NUnit v2 测试?a)在这里 ping b)在顶部放置一个“另见 ”(即使它是有点脆弱),但我希望删除这个答案,因为它与标题中的 xUnit v2 tests 不符。
        【解决方案14】:

        我可以为几天前遇到的极端情况提供解决方案。它不会是适合上述所有场景的解决方案,但是,对于边缘情况,我已经修复了它。

        我在最新的 VS 2017(版本 15.5.7)和 XUnit 2.3.1 中遇到了同样的问题。 xunit.runner.visualstudio 包已安装,但是测试并未显示在 VisualStudio 的内置测试资源管理器中。

        我正在处理一个以 .NET 框架 4.5 为目标的遗留项目。但是,从 2.2 版开始。 XUnit 不支持低于 4.5.2 的 .NET 框架(请参阅Release Notes - XUnit 2.2: February 19, 2017

        将测试项目的目标框架更改为 >= 4.5.2 对我有用。您不必更改正在测试的项目的版本,只需更改测试项目本身即可。

        【讨论】:

          【解决方案15】:

          在我的案例中,原因是项目调试器和测试运行器之间的目标构建不同。统一这些元素:

          1. 测试>测试设置>默认处理器架构。然后选择 X64 或 X86。
          2. 项目>(您的项目)属性>构建(选项卡)>平台目标。

          在它们相同后,重新构建您的解决方案,然后将为您显示测试方法。

          【讨论】:

            【解决方案16】:

            这个问题困扰我很久了。

            • 我在不同的服务器上部署了大约 100 个不同版本的项目。

            • xunit 从 2.2.0 更新到 2.3.1 不是解决方案,因为在 2.3.1 中构建失败。

            然后我刚刚将 xunit.runner.visualstudio 更新为 2.3.1,一切都开始正常了。 我在我的包管理器控制台中使用了这个命令来更新我的 xunit.runner.visualstudio 包

            Get-Project ComapanyName.ProjectName.*.Tests | Install-Package xunit.runner.visualstudio -Version 2.3.1
            

            【讨论】:

              【解决方案17】:

              我尝试了上面的大部分建议,但没有任何效果。就我而言,我在一个团队中,并且正在为其他开发人员提供相同解决方案的测试。所以,我试图删除我的 .vs 文件夹,但也没有运气。

              我最终完全删除了我的本地文件夹并重新克隆了存储库。这为我解决了。

              【讨论】:

                【解决方案18】:

                我有测试项目 A 和 B。项目 A 中的测试发现但发现从未停止 B。我必须手动终止 TestHost 才能停止。

                我做了很多本页描述的事情,甚至到了我不确定这是否是解决方案的地步。

                现在它起作用了,我所做的就是打开解决方案,而不是启动测试资源管理器。相反,我只是检查了测试的输出窗口,我可以看到发现过程结束并且测试数量等于 A+B。在此之后,我打开了测试资源管理器,然后打开了 A 和 B。 所以:

                正确卸载并安装最新的 xUnit。删除上面提到的%temp%,添加NuGet包“Microsoft.TestPlatform.TestHost” 添加 NuGet 包“Microsoft.NET.Test.Sdk”,重启但只检查测试输出。如果它有效,你会看到

                【讨论】:

                • 哦,检查一下测试目标架构。 x86 或 x64 并确保项目和引用符合您的选择
                • 嗯,我不确定我是否购买了卸载和重新安装软件包,或者是否需要 Microsoft.TestPlatform.TestHostMicrosoft.NET.Test.Sdk,但我很感激你的挫败​​感,记录你为到达终点所做的事情上下文(如果我设法将其验证为产生影响的特定步骤,我会 +1)
                • 您能在此提及您的 VS 版本吗?虽然我试图保持问题和我的自我回答版本独立,但我怀疑任何阅读此内容并猜测是否值得一试的人都会受益于将上下文编辑到您的答案中。
                • 我可以补充一点,今天它根本不起作用!!它是 VS 2017 企业版。我今天放弃了。我卸载了项目,测试将不会运行。项目本身可能有问题。在某处阅读可能是由于异步测试与异常(未实现)相结合,但我已经完成了。没有有价值的信息。它只是挂在发现上,有时我看到了测试,但不是今天。
                • 这听起来很痛苦。如果发现实际上挂起(即输出面板的测试窗口未显示完成且没有错误),则将另一个 VS 副本(通过附加到进程,Ctrl-Alt-P)附加到 vstest.discovery 可能很有用。 exe 主机 exe 在其中发生。但是我怀疑应该有某种形式的超时,并且从未听说过有人真正做这样的事情。我希望你的问题很快会变得更简单:(
                【解决方案19】:

                我清除了 Temp、%Temp% 和 Prefetch。然后尝试重新打开VS并能够找到测试方法

                【讨论】:

                  【解决方案20】:

                  在我的情况下,我在同一个解决方案中有多个测试项目,只有一个项目没有显示“测试资源管理器”

                  我通过右键单击解决方案转到“管理解决方案的 Nuget 包”。

                  我注意到在“合并”选项卡下有一些“测试”nuget 包在项目之间不同步。我点击了“安装”,我丢失的测试出现了。

                  【讨论】:

                    【解决方案21】:

                    当您将 VS2015 迁移到 VS2017 以在测试资源管理器中进行发现测试时,您需要更新所有包。

                    【讨论】:

                      【解决方案22】:

                      为测试项目安装xunit.runner.visualstudio

                      【讨论】:

                      • 页面上的最佳答案。解决了我的问题。
                      • 已经安装,但是通过 nuget 升级版本让它再次工作。
                      • 精确解决方案,适用于 VS 2019
                      【解决方案23】:

                      我的解决方案中有许多不同类型的项目,我无法运行 Xunit 测试项目。我卸载了除了我的 Xunit 项目之外的所有这些,然后重建了测试出现在 Visual Studio 中的解决方案,我可以运行它们。

                      【讨论】:

                      • 使用 Visual Studio 2017 并将包升级到 xunit.runner.visualstudio.2.3.1 后,Xunit 测试出现在 Unittests 旁边。
                      【解决方案24】:

                      按照以下步骤:

                      1. nugget package manager 更新您的MsTest.TestAdapterMsTest.TestFramework dll's
                      2. 清理您的解决方案
                      3. 构建您的解决方案。

                      【讨论】:

                      • 你能像我一样打开这个问题的克隆并自我回答吗?这个是关于 xUnit v2 及更高版本的。甚至 xUnit v1 的答案在这里也没有位置。您可以通过问题顶部的“也看到”链接到它,或者我可以在问题中链接到它
                      • 此解决方案有效。否则每次我必须删除 %TEMP%\VisualStudioTestExplorerExtensions 时,有时我仍必须从控制台运行测试。
                      • 我正在使用 NUnit,我通过 NuGet 将 NUnit3TestAdapter 更新到最新版本解决了这个问题。
                      • 谢谢你 - 在我的例子中只需要更新包 - 重新安装 MSTest.TestAdapter 并且测试得到了。
                      【解决方案25】:

                      通过安装 nuget xunit.runner.visualstudio 解决了我的问题

                      【讨论】:

                        【解决方案26】:

                        遇到了与 VS 未发现测试方法类似的问题。在我的例子中,我在方法中使用了 static 关键字,我删除了它并且它起作用了。

                        [TestMethod]
                        
                        Before: public static void Test1()
                        
                        After: public void Test1()
                        

                        【讨论】:

                        • 如果这不在这里,我真的更喜欢,因为这是关于在特定 VS 实例中找不到的其他正确测试。我有一个关于为什么无法发现 xunit 测试的自我回答:stackoverflow.com/questions/16214684/…。我可以建议你创建一个为什么我的 MSTest 测试不能被拾取(如果你愿意,可以通过 VS)。 (如您所知,这个特别的问题甚至不适用于 xUnit,这是另一个原因,尽管它很有帮助,但您的答案不属于这里)
                        • MSTest 没有找到我的测试,因为类访问修饰符是内部的。
                        【解决方案27】:

                        我正在使用 xUnit 2.2.0。

                        我的问题是我的解决方案无法找到某些 dll,app.config 正在尝试解决它们。该错误未显示在 Visual Studio 的测试输出窗口中。

                        当我安装xunit.runner.console 并尝试通过命令行运行测试时,我能够识别错误。

                        How to run xunit tests in CLI.

                        【讨论】:

                          【解决方案28】:

                          就我而言,我的解决方案中有 2 个不同的测试项目。可以找到项目 1 的测试,但找不到项目 2 的测试。我发现首先卸载测试项目 1,然后关闭 VS > 清除我的临时文件 > 重新打开解决方案 > 重建,允许 VS 发现我的项目 2 测试。

                          我假设两个测试项目之间一定存在冲突,这是让我在几分钟内启动并运行的最快方法。问题可以稍后解决:)。

                          【讨论】:

                            【解决方案29】:

                            我不知道你们中的一些人是否也使用 JustMock,但我必须在 VS 2017 中禁用分析器才能进行测试检测。

                            【讨论】:

                            • 嗯。如果你重新打开它,它会立即再次失败吗?
                            • 是的。如果我关闭解决方案,打开分析器并重新进入,测试检测失败。
                            【解决方案30】:

                            就我而言,我创建了一个新的“解决方案配置”,如图所示。因此,当我将自定义选项选为“Prod”时,由于某种原因,它无法识别 TestMehods。改回“调试”即可解决问题

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2015-06-16
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-07-23
                              • 2018-09-23
                              • 2015-08-13
                              • 1970-01-01
                              相关资源
                              最近更新 更多