为什么xUnit Runner没有find我的testing
我有一个xUnit.nettesting如下:
static class MyTestClass { [Fact] static void MyTestMethod() { } }
VS 2012的xUnit插件说:
没有testing发现运行。
TestDriven.net运行的很好, 但提到了Ad hoc的一些东西 :
1通过,0失败,0跳过(见“任务列表”),花了0.47秒(Ad hoc)
TeamCity, xunit.gui.exe
和xunit.console.exe
以及Visual Studio也找不到TestMethod
(我已经安装了xunit.runner.visualstudio
,VS正在看一些testing。)
是什么赋予了?
TL; DR你的testing类必须是public
(但你的testing方法可以是private
和/或static
)
出于效率原因,xUnit作者在运行器中searchTest Classes时select不使用BindingFlags.NonPublic
(MSIL元数据表不会使private
(/ internal
)类的索引达到相同的程度,因此存在显着的性能差异在reflection可以实现的相对效率中)。
由于上述原因,你的class
是private
意味着它不会被拿起来。
testing方法是private
和static
这一事实很好 – xUnit的devise,因为1.0支持这两个方面。
请注意,Visual Studio xUnit Runner扩展, xunit.console.exe
(和GUI), xunit.console.exe
MSBuild任务,Resharper和CodeRush在遵守这一切方面都是一致的(尽pipe可以说他们(特别是后两者)可以做更多的标记一个testing类(即包含Fact
衍生的注释的[可能间接])是private
)。
TestDriven.net运行你的testing的原因是TestDriven.net的作者已经付出了巨大的努力,使其工作。 它在内部使用一个特殊的testing运行器包装/垫片(称为Adhoc亚军)来运行你的testing。 请注意,该方法实际上不是通过xUnit.net runner运行的,因此您在testing中放置的任何具有副作用的属性都不会被触发。
值得注意的是NUnit(我非常确定MSTest) 确实使用了私人reflection[因此在private
课堂上进行testing],这可能是为什么你以前从未担心过的重要事情。
注意:由此启用的一个副作用/技巧是,您可以使testing类作为一种快捷的方式来Skip
testing类[和任何嵌套类]中的所有testing。 (不幸的是,这个星球上的情况无意中大大超过了这个故意的情况!)
这个答案适用于VS 2013,但VS 2012的步骤基本相同。这适用于通过ReSharper的unit testingfunction运行 。
-
安装Visual Studio 2013的xUnit.net运行器(小心以pipe理员身份运行Visual Studio,或者以非pipe理员身份运行IDE时,testing可能无法运行):
一个。 从Visual Studio 2013中,进入工具 – >扩展和更新 – >在线
湾 searchVisual Studio 2012和2013的xUnit.net运行器
C。 然后下载(安装)它。 如果从VS 2012升级到VS 2013,build议将其卸载,然后重新安装。
d。 重新启动Visual Studio。
-
如果安装了ReSharper,请安装xUnit.nettesting运行器插件:
一个。 在Visual Studio 2013中,浏览:resharper – > Extension Manager。
湾 在左侧,select在线。
C。 search“xunit.net”。 select“xUnit.nettesting支持”。 点击安装。
d。 重新启动Visual Studio 2013。
-
“清理”解决scheme
一个。 在IDE中的“解决scheme资源pipe理器”中,右键单击该解决scheme,然后select“清理”。
湾 重新编译。
C。 现在,右键单击
[Fact]
属性时,selectResharper的“运行unit testing”(相对于默认的“运行testing”)
疑难解答使用XUnit运行:
-
如果运行XUnit [Fact]testing的问题持续存在,则可能需要手动从以下任何/所有文件夹中删除xUnit软件包(查看xunit dll的内容,如果find则删除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.nettesting支持)。 我注意到一旦卸载,一些错误消息闪烁过去。 我抓住了一个屏幕截图,它列出了:
- 访问path
C:\Users\<username>\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\
目录,然后以非pipe理员身份运行Visual Studio,并通过ReSharper(Resharper – > Extension Manager)重新安装 - 访问path
从http://xunit.github.io/docs/getting-started-desktop.html#run-tests-visualstudio :
如果在发现或运行testing时遇到问题,则可能是Visual Studio中损坏的runnercaching的受害者。 要清除此caching,请closuresVisual Studio的所有实例,然后删除文件夹%TEMP%\ VisualStudioTestExplorerExtensions。 另外,请确保您的项目仅与单个版本的Visual Studio Runner NuGet程序包(xunit.runner.visualstudio)链接。
我在VS2017 RC,.NET核心1.1项目中遇到同样的问题。 更新xunit.runner为我工作,
Install-Package xunit.runner.visualstudio
(由@Kyle在另一个答案的评论中提到)相同的No tests found to run
消息可以导致使用NuGet得到xUnit.dll和2.0.0版本(目前标记为预发行的一些像发现v1testing等核心function尚未在该分支中实现)。
这种情况下的解决scheme是在NuGet包pipe理器中selectStable Only版本(而不是包括预发行 )。
就我而言,为了看到任何testing,我必须完成以下步骤:
(所有通过NuGet包pipe理器安装)
- 安装
xUnit
v2.0.50727 - 安装
xUnit.extensions
v2.0.50727 - 导航到以下链接并按照文档中列出的步骤操作: http : //xunit.github.io/docs/running-tests-in-vs.html
我正在使用Visual Studio 2013 Premium。 (Resharper未安装)
对我而言,我的testing类和testing方法名称的组合太长; xUnit似乎在这个组合上有一些上限。
缩短testing方法的名称允许xUnit发现单个testing。 缩短整个类的名称允许xUnit发现类中的所有testing。
类名称+方法名称的阈值显示为172个字符。
我已经有一段时间了.NET Core的这个问题,现在没有发现一个testing类或testing方法。 以下修补程序适用于我:
- 打开命令提示符窗口。
- 切换到项目目录。
-
生成运行以下命令的项目:
dotnet build
注意:从Visual Studio.NET构build将不起作用! <<<<<<<<<<< 重要!
- 运行testing:testing – >运行 – >全部testing – CTRL + R + A(这将发现新的testing – 但不运行新的testing。
- 再次运行testing。