我有一个 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.exe
和 xunit.console.exe
以及 Visual Studio 也找不到 TestMethod
(我已经安装了 xunit.runner.visualstudio
,并且 VS 正在进行一些测试。)
是什么赋予了?
TL;DR 您的测试类必须为 public
(但您的测试方法可以是 private
和/或 static
)
出于效率的原因,xUnit 作者选择在运行器中搜索测试类时不使用 BindingFlags.NonPublic
(MSIL 元数据表不会以相同程度索引 private
(/internal
) 类,因此存在反射可以实现的相对效率的显着性能差异)。
由于上述原因,您的 class
是 private
意味着它不会被拾取。
测试方法是 private
和 static
的事实很好 - 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 操作的方法。 (可悲的是,这个星球上无意中使用的案例远远超过了故意使用的案例!)
此答案适用于 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\
拒绝访问路径 C:\Users\
...对于该目录中的其他 DLL 也是如此
要解决此问题,请在从 Visual Studio 卸载后删除 C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\
目录,然后以非管理员身份运行 Visual Studio,然后通过 ReSharper (Resharper -> Extension Manager) 重新安装
从 http://xunit.github.io/docs/getting-started-desktop.html#run-tests-visualstudio:
如果您在发现或运行测试时遇到问题,您可能是 Visual Studio 中损坏的运行程序缓存的受害者。要清除此缓存,请关闭 Visual Studio 的所有实例,然后删除文件夹 %TEMP%\VisualStudioTestExplorerExtensions。还要确保您的项目仅链接到单个版本的 Visual Studio 运行程序 NuGet 包 (xunit.runner.visualstudio)。
我在 VS2017 RC,.NET core 1.1 项目中遇到了同样的问题。更新 xunit.runner 对我有用,
Install-Package xunit.runner.visualstudio
-Reinstall
标志才能做你没有做的任何事情?
(正如@Kyle 在另一个答案的评论中所提到的)相同的 No tests found to run
消息可能来自使用 NuGet 获取 xUnit.dll 并最终得到版本 2.0.0(目前被标记为预发布作为一些核心功能例如发现 v1 测试等尚未在该分支中实现)。
在这种情况下,解决方案是在 NuGet 包管理器中选择仅稳定版本(而不是包含预发行版)。
就我而言,为了查看任何测试,我必须完成以下步骤:
(全部通过 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)
对我来说,我的测试类和测试方法名称的组合太长了; xUnit 似乎对这种组合有一些限制。
仅缩短测试方法的名称允许 xUnit 发现单个测试。缩短整个类的名称允许 xUnit 发现类中的所有测试。
类名 + 方法名的阈值似乎是 172 个字符。
一段时间以来,我一直在使用 .NET Core 遇到这个问题,其中没有发现测试类或测试方法。以下修复适用于我:
打开命令提示符窗口。切换到项目目录。运行以下命令构建项目:dotnet build
注意:从 Visual Studio.NET 构建将不起作用! <<<<<<<<<<< 重要!
运行测试:测试 --> 运行 --> 全部测试 - CTRL+R +A (这将发现新的测试 - 但不运行新的测试。再次运行测试。
xunit.runner.visualstudio
)
我的问题是我将 xunit.runner.visualstudio
更新到版本 2.4.5
。但是,我正在从事的项目是针对 .NET Standard 2.0 的。因此,我不得不降级到 xunit.runner.visualstudio
的 2.4.3
版本,因为它支持“.NET 2.0 或更高版本”。但从版本 2.4.4
开始,支持“.NET Core 3.1 或更高版本”。
public
,我尝试了 beta 和非 beta Nuget 包(用于 Xunit.net 和跑步者),测试资源管理器找不到我的Fact
方法。