为什么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.exexunit.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可以实现的相对效率中)。

由于上述原因,你的classprivate意味着它不会被拿起来。

testing方法是privatestatic这一事实很好 – 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类作为一种快捷的方式来Skiptesting类[和任何嵌套类]中的所有testing。 (不幸的是,这个星球上的情况无意中大大超过了这个故意的情况!)

这个答案适用于VS 2013,但VS 2012的步骤基本相同。这适用于通过ReSharper的unit testingfunction运行 。

  1. 安装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。

  2. 如果安装了ReSharper,请安装xUnit.nettesting运行器插件:

    一个。 在Visual Studio 2013中,浏览:resharper – > Extension Manager。

    湾 在左侧,select在线。

    C。 search“xunit.net”。 select“xUnit.nettesting支持”。 点击安装。

    d。 重新启动Visual Studio 2013。

  3. “清理”解决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支持)。 我注意到一旦卸载,一些错误消息闪烁过去。 我抓住了一个屏幕截图,它列出了:

    • 访问pathC:\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)重新安装

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理器安装)

  1. 安装xUnit v2.0.50727
  2. 安装xUnit.extensions v2.0.50727
  3. 导航到以下链接并按照文档中列出的步骤操作: 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方法。 以下修补程序适用于我:

  1. 打开命令提示符窗口。
  2. 切换到项目目录。
  3. 生成运行以下命令的项目:

     dotnet build 

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

  1. 运行testing:testing – >运行 – >全部testing – CTRL + R + A(这将发现新的testing – 但不运行新的testing。
  2. 再次运行testing。