ChatGPT解决这个技术问题 Extra ChatGPT

为什么 xUnit Runner 找不到我的测试

我有一个 xUnit.net 测试如下:

static class MyTestClass
{
    [Fact]
    static void MyTestMethod() 
    {
    }
}

VS 2012 的 xUnit 插件说:

没有发现要运行的测试。

TestDriven.net 运行良好 but mentions something about Ad hoc

1 次通过,0 次失败,0 次跳过(参见“任务列表”),耗时 0.47 秒(临时)

TeamCity、xunit.gui.exexunit.console.exe 以及 Visual Studio 也找不到 TestMethod

(我已经安装了 xunit.runner.visualstudio,并且 VS 正在进行一些测试。)

是什么赋予了?


R
Răzvan Flavius Panda

TL;DR 您的测试类必须public(但您的测试方法可以是 private 和/或 static

出于效率的原因,xUnit 作者选择在运行器中搜索测试类时不使用 BindingFlags.NonPublic(MSIL 元数据表不会以相同程度索引 private(/internal) 类,因此存在反射可以实现的相对效率的显着性能差异)。

由于上述原因,您的 classprivate 意味着它不会被拾取。

测试方法是 privatestatic 的事实很好 - xUnit 从 1.0 开始就设计支持这两个方面。

请注意,Visual Studio xUnit Runner 扩展、xunit.console.exe(和 GUI)、xunit MSBuild 任务、Resharper 和 CodeRush 在遵守这一点方面都是一致的(尽管可以说它们 [尤其是后两者] 可以做更多的事情来标记一个测试类(即包含Fact 派生注释的类[可能间接地])是private)。

TestDriven.net 运行您的测试的原因是 TestDriven.net 的作者已经付出了巨大的努力来使其正常工作。它在内部使用一个特殊的 Test Runner 包装器/垫片(称为 Adhoc Runner)来运行您的测试。请注意,该方法实际上并未通过 xUnit.net 运行程序运行,因此您在测试中放置的任何具有副作用的属性都不会被触发。

值得注意的是 NUnit(我很确定 MSTest)确实使用私有反射 [因此在 private 类中进行测试],这可能就是为什么它似乎从来没有让你担心过重要的事情.

注意:由此产生的副作用/技巧是,您可以创建一个测试类private,作为一种快速Skip对测试类 [和任何嵌套类] 中的所有测试进行 ping 操作的方法。 (可悲的是,这个星球上无意中使用的案例远远超过了故意使用的案例!)


我有同样的问题,我的课是公开的,试图将 MS Test runner 与 Visual Studio Extension xUnit Test Runner 与 VS 2012 一起使用
@Kyle我不清楚您在做什么和/或看到的结果和/或任何人可以如何帮助您。我有一个问题,你已经评论了我的解决方案。首先,注意这个问题和答案都是关于 xUnit.net 的。您提到了 MS Test,它依赖于内置的运行程序(我很确定 MSTest 不允许测试方法是私有的)。
抱歉随机评论问题,我的问题是我安装了预发布的 nuget 包,它不包括 xunit.dll 但 xunit2.dll,所以它不会接受任何测试
@Kyle 啊,现在这是有道理的——至少有足够的意义添加为答案,这样我就可以投票了(我个人意识到这一点,但我可以保证有人会被它咬伤并会感谢你)
我的事实类也是 public,我尝试了 beta 和非 beta Nuget 包(用于 Xunit.net 和跑步者),测试资源管理器找不到我的 Fact 方法。
C
CJBS

此答案适用于 VS 2013,但步骤与 VS 2012 基本相同。这适用于通过 ReSharper's unit test functionality 运行。

为 Visual Studio 2013 安装 xUnit.net 运行程序(小心以管理员身份运行 Visual Studio,否则在以非管理员身份运行 IDE 时测试可能无法运行):在 Visual Studio 2013 中,转到工具 -> 扩展和更新 -> 在线 b。为 Visual Studio 2012 和 2013 搜索 xUnit.net 运行程序 c。然后下载(安装)它。如果从 VS 2012 升级到 VS 2013,建议先卸载这个,然后重新安装。 d。重新启动 Visual Studio。如果安装了 ReSharper,请安装 xUnit.net 测试运行器插件:(注意:自 ReSharper 2016.1 起,ReSharper 内置了 xunit 支持,这意味着不再需要 xunit 插件。)在 Visual Studio 2013 中,导航:Resharper -> 扩展管理器。湾。在左侧,选择在线。 C。搜索“xunit.net”。选择“xUnit.net 测试支持”。单击安装。 d。重新启动 Visual Studio 2013。“清理”解决方案在 IDE 的解决方案资源管理器中,右键单击解决方案,然后选择“清理”。湾。重新编译。 C。现在,当右键单击 [Fact] 属性时,选择 Resharper 的“运行单元测试”(而不是默认的“运行测试”)

使用 XUnit 运行故障排除:

如果使用 XUnit 运行 [Fact] 测试的问题仍然存在,可能需要从以下任何/所有文件夹中手动删除 xUnit 包(查看 xunit DLL 的内容,如果发现则删除 xUnit 文件夹):C:\Program文件 (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\ C:\Users\<用户名>\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\

C:\Users\<用户名>\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\

至于 ReSharper,请尝试卸载并重新安装 xunitcontrib 库(xUnit.net 测试支持)。我注意到卸载时有一次,一些错误消息闪烁过去。我抓了一张屏幕截图,它列出了:访问路径 C:\Users\\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1 \plugins\xunit.dll 被拒绝。 ...对于该目录中的其他 DLL 也是如此

拒绝访问路径 C:\Users\\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll。

...对于该目录中的其他 DLL 也是如此

要解决此问题,请在从 Visual Studio 卸载后删除 C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ 目录,然后以非管理员身份运行 Visual Studio,然后通过 ReSharper (Resharper -> Extension Manager) 重新安装


VS 2013 + ReSharper 8.2 的明确答案
对于 VS 2013 + R# 8.2,我发现重新启动 VS 对我有用。这是在使用 R# 的扩展管理器下载并安装 xUnit 支持之后
希望我能多次投票!我错过了 resharper 扩展:S
@RubenBartelink 当我写这篇文章时,我在让 ReSharper 运行我的 xUnit 测试时遇到问题,我的输出“没有找到要运行的测试”。与您的问题中描述的相同。我没有 TestDriven.net,所以我无法验证任何一种方式。我的许多 xUnit 问题都与通过 NuGet 或 ReSharper 安装的更新有关,因此提供了有关如何处理它们的说明。
@CJBS 我想我可以表达的最简单的方法是将标题更改为“为什么 xUnit 跑步者没有找到(某些)我的测试。不过,经过反思,一站式服务问题有时正是人们所需要的,即使它确实违反了一些 SO 原则。
D
Dan Friedman

http://xunit.github.io/docs/getting-started-desktop.html#run-tests-visualstudio

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


嘿丹,我有一个相关链接:关于问题:stackoverflow.com/questions/35103781/…,它解决了这一系列问题,我真的很想让这个问题集中在 xUnit 看不到测试的原因上。我真的希望你会同意链接到那里并链接到那里是最好的。有没有办法让我在问题或答案中更清楚地说明这一点? (例如,这里删除了 3 个其他答案,这些答案类似的尝试会有所帮助,但会混淆问题)
我收到同样的错误“没有找到要运行的测试”。这对您来说可能是一个不同的问题,但两种情况最终都会出现相同的错误。另一个答案并不意味着有第二个问题。如果有的话,这个答案可以与接受的答案合并,以显示测试可能没有出现的所有原因。
我们将不得不同意不同。上下文不同 - 我明确地说 VS2012,而您需要在 VS2015 中使用 xUnit v2 而不是 V1 遇到特定(罕见)问题。有 2 个已删除的答案比您的更相关。我是否应该要求他们取消删除(例如:resharper、.NET core beta、安装 xUnit.Runner.Console 而不是桌面)。你不高兴有一个 resharper 版本和一个 VS2015 版本,让它在 5 年内有用,而不是你的答案与 VS2019 的答案竞争,而你的答案将完全无关紧要?
D
Dhanuka777

我在 VS2017 RC,.NET core 1.1 项目中遇到了同样的问题。更新 xunit.runner 对我有用,

Install-Package xunit.runner.visualstudio

您能否澄清一下您是否首先安装了该软件包?即,我相信上面的命令需要一个 -Reinstall 标志才能做你没有做的任何事情?
是的,我安装了软件包,这将 xunit 运行器从 2.2.0-beta5-build1225 版本更新到了 2.2.0。
xunit.runner.console 是不够的,但是当我安装它时,它起作用了
R
Ruben Bartelink

(正如@Kyle 在另一个答案的评论中所提到的)相同的 No tests found to run 消息可能来自使用 NuGet 获取 xUnit.dll 并最终得到版本 2.0.0(目前被标记为预发布作为一些核心功能例如发现 v1 测试等尚未在该分支中实现)。

在这种情况下,解决方案是在 NuGet 包管理器中选择仅稳定版本(而不是包含预发行版)。


这是 xUnit 开发人员的一个非常愚蠢的选择,如果他们现在要让 2.0 变得如此糟糕,他们应该将整个项目重命名为 xUnit2 而不是这样做。
R
Ruben Bartelink

就我而言,为了查看任何测试,我必须完成以下步骤:

(全部通过 NuGet 包管理器安装)

安装 xUnit v2.0.50727 安装 xUnit.extensions v2.0.50727 导航到以下链接并按照文档中概述的步骤操作:http://xunit.github.io/docs/running-tests-in-vs.html

我正在使用 Visual Studio 2013 Premium。 (未安装 Resharper)


链接已损坏:404 - 这里没有 GitHub Pages 站点。
S
StoriKnow

对我来说,我的测试类和测试方法名称的组合太长了; xUnit 似乎对这种组合有一些限制。

仅缩短测试方法的名称允许 xUnit 发现单个测试。缩短整个类的名称允许 xUnit 发现类中的所有测试。

类名 + 方法名的阈值似乎是 172 个字符。


+1 测试发现的输出窗口中是否有任何消息在中断时出现?如果有的话,值得添加到帖子中
不幸的是没有。它只是说“没有找到要运行的测试”。直到我添加了一个带有可疑长名称和测试方法的类,然后将两个和两个放在一起,我才遇到问题。
m
mkaj

一段时间以来,我一直在使用 .NET Core 遇到这个问题,其中没有发现测试类或测试方法。以下修复适用于我:

打开命令提示符窗口。切换到项目目录。运行以下命令构建项目:dotnet build

注意:从 Visual Studio.NET 构建将不起作用! <<<<<<<<<<< 重要!

运行测试:测试 --> 运行 --> 全部测试 - CTRL+R +A (这将发现新的测试 - 但不运行新的测试。再次运行测试。


嗨,请注意这里的问题是为什么只有一个 TestClass 有问题。请将此作为一个自我回答的问题,并注意它特别是在 .NET Core 上可能出现的事情(特定于预发布版) - 有两个赞成票给你,而我真的不认为这对 thsi 有帮助具体问题
我已经更新了我的答案,因为它适用于一个课程,或者只是一种它找不到的方法。有趣的是,您注意到它只是特定于 .NET Core 预发行版。我们还没有升级。接下来上牌。
只是微微一动。我想这里的投票会告诉其他人是否认为这是正确的地方(请记住,标题是为什么 xUnit 跑步者没有找到我的测试 - 有很多 VS2015 特定的问题(或者你使用的是 VS2017 吗?))
我不介意赞成票。我在这里发帖是为了为其他下注者提供额外的选择——如果他们有同样的问题。这就是我发现修复的方式。我在 VS2015 中使用 .NET Core 预发行版。
我关于赞成票的观点是,它们衡量答案与 a) 问题 b) 可以产生问题的搜索标准的相关性。我是说 b) 可能是这样,尽管 a) 不是这样。我有信心同意您没有基于对虚假互联网积分的疯狂渴望给出如此详细的答案,并且是出于最佳信念行事;然而,我恭敬地继续争论这个答案不在其最相关的可能位置的情况(注意,作者在这里删除了 3 个其他答案:1xResharper、1xDnx、1x 未安装 xunit.runner.visualstudio
D
Daniel Jonsson

我的问题是我将 xunit.runner.visualstudio 更新到版本 2.4.5。但是,我正在从事的项目是针对 .NET Standard 2.0 的。因此,我不得不降级到 xunit.runner.visualstudio2.4.3 版本,因为它支持“.NET 2.0 或更高版本”。但从版本 2.4.4 开始,支持“.NET Core 3.1 或更高版本”。