我有一个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秒(Ad hoc)
TeamCity,xunit.gui.exe
和xunit.console.exe
以及Visual Studio也找不到TestMethod
(我已安装xunit.runner.visualstudio
,VS正在进行一些测试。)
是什么给出了?
答案 0 :(得分:93)
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
- 派生的annoations)类为private
)时,可以做更多的事情来标记。
TestDriven.net运行测试的原因是TestDriven.net的作者已投入大量精力使其成为Just Work。它在内部使用一个特殊的Test Runner包装器/垫片(称为Adhoc Runner)来运行测试。请注意,该方法实际上并非通过xUnit.net运行器运行,因此您在测试中放置的任何具有副作用的属性都不会被触发。
值得注意的是NUnit(我非常肯定MSTest)做使用私有反射[并因此在private
类中选择测试]这可能是为什么它似乎永远不会是重要的你以前担心。
注意:由此启用的副作用/技巧是您可以将测试类private
作为Skip
ping测试类[和任何嵌套类]中所有测试的快捷方式。 (可悲的是,这个星球上的这种情况被无意中使用的数量远远超过了有意的情况!)
答案 1 :(得分:43)
此答案适用于VS 2013,但VS 2012的步骤基本相同。这适用于通过ReSharper's unit test functionality运行。
为Visual Studio 2013安装xUnit.net运行器(请小心以管理员身份运行Visual Studio,否则在以非管理员身份运行IDE时可能无法运行测试):
一个。在Visual Studio 2013中,转到工具 - >扩展程序和更新 - >在线
湾搜索Visual Studio 2012和2013的xUnit.net runner
℃。然后下载(安装)它。如果从VS 2012升级到VS 2013,建议先将其卸载,然后重新安装。
d。重新启动Visual Studio。
如果安装了ReSharper,请安装xUnit.net test runner插件:
一个。在Visual Studio 2013中,导航:Resharper - >扩展经理。
湾在左侧,选择在线。
℃。搜索“xunit.net”。选择“xUnit.net Test Support”。单击“安装”。
d。重新启动Visual Studio 2013。
“清理”解决方案
一个。在IDE中,在“解决方案资源管理器”中,右键单击解决方案,然后选择“清除”。
湾重新编译。
℃。现在,右键单击[Fact]
属性时,选择Resharper的“运行单元测试”(而不是默认的“运行测试”)
使用XUnit运行故障排除:
如果使用XUnit运行[Fact]测试的问题仍然存在,则可能会出现问题 有必要从任何/所有的手动删除xUnit包 以下文件夹(查看xunit DLL的内容,然后删除 找到xUnit文件夹):
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\
C:\Users\<username>\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\
对于ReSharper,请尝试卸载并重新安装 xunitcontrib库(xUnit.net测试支持)。我注意过一次 卸载时,一些错误消息闪过。我抓了一个 屏幕截图一点,它列出:
C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll
被拒绝。 要解决此问题,请在从Visual Studio卸载后删除C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\
目录,然后以非管理员身份运行Visual Studio,并通过ReSharper(Resharper - &gt; Extension Manager)重新安装
答案 2 :(得分:18)
来自http://xunit.github.io/docs/getting-started-desktop.html#run-tests-visualstudio:
如果您在发现或运行测试时遇到问题,那么您可能会遇到问题 Visual Studio中损坏的运行器缓存的受害者。要清除这一点 缓存,关闭所有Visual Studio实例,然后删除 文件夹%TEMP%\ VisualStudioTestExplorerExtensions。还要确保你的 项目仅链接到Visual Studio的单个版本 转轮NuGet包(xunit.runner.visualstudio)。
答案 3 :(得分:13)
我在VS2017 RC,.NET核心1.1项目中遇到了同样的问题。更新xunit.runner为我工作,
Install-Package xunit.runner.visualstudio
答案 4 :(得分:6)
(正如@Kyle在其他答案的评论中所提到的)使用NuGet获取xUnit.dll并最终获得版本2.0.0(目前标记为2.0)可能导致No tests found to run
消息相同预发布,因为发现v1测试等一些核心功能尚未在该分支中实现。)
在这种情况下,解决方法是在NuGet包管理器中选择仅稳定版本(而不是包含预先发布)。
答案 5 :(得分:4)
对我来说,我的测试类和测试方法名称的组合太长了; xUnit似乎对此组合有一些限制。
缩短的名称测试方法允许xUnit发现单个测试。缩短整个类的名称允许xUnit发现类中的所有测试。
班级名称+方法名称的阈值似乎为172个字符。
答案 6 :(得分:3)
就我而言,为了看到任何测试,我必须完成以下步骤:
(全部通过NuGet Package Manager安装)
xUnit
v2.0.50727 xUnit.extensions
v2.0.50727 我正在使用Visual Studio 2013 Premium。 (未安装Resharper)
答案 7 :(得分:2)
我一直在使用.NET Core这个问题一段时间没有发现测试类或测试方法。以下修复适用于我:
使用以下命令构建项目:
dotnet build
注意:从Visual Studio.NET构建不起作用! &LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT; 重要!强>