为什么的xUnit亚军没有找到我的测试(Why is the xUnit Runner not fi

2019-09-01 03:02发布

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

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

该插件的xUnit为VS 2012说:

没有找到测试运行。

TestDriven.net运行它精细,但提到一些有关特设 :

1过去了,0失败,0跳过(请参阅“任务列表”),把0.47秒(特设)

TeamCity的, xunit.gui.exexunit.console.exe和Visual Studio还无法找到TestMethod

(我有xunit.runner.visualstudio安装和VS是看到一些测试。)

是什么赋予了?

Answer 1:

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


出于效率的原因,的xUnit作者已经选择不使用BindingFlags.NonPublic在亚军搜索测试类时(MSIL的元数据表不索引private (/ internal )类相同的程度,因此是有显著的性能差异在相对效率的反射可因此实现)。

由于上述的结果,事实上,你的classprivate意味着它不会回升。

事实上,测试方法是privatestatic是好的-因为1.0设计的xUnit一直支持这两个方面。

请注意,在Visual Studio的xUnit亚军扩展, xunit.console.exe (和GUI),该xunit MSBuild任务,ReSharper的和的CodeRush是在履行这一切是一致的(尽管可以认为它们[尤其是后两者]可以做更多的标志时测试类(即类[潜在间接含有Fact衍生annoations)是private )。

TestDriven.net运行测试的原因是TestDriven.net的作者已经把很大的精力来使它只是工作。 它内部采用了特殊的测试运行的包装/垫片(称为自组亚军)来运行测试。 请注意,该方法实际上是不通过xUnit.net亚军,因此你把你的测试有副作用将不会触发任何属性运行。

值得注意的是NUnit的(和我敢肯定MSTest的) 使用私有反射[并因此拿起测试private类]这可能是为什么它似乎从来没有一件重要的事为您关于之前担心。

注意:此启用副作用/技巧是,你可以做一个测试类private作为一种快捷方式Skip平在测试类的所有测试[和任何嵌套类。 (遗憾的是在这个星球上的这种情况下被使用无意中远多于这个故意的情况下,虽然!)



Answer 2:

这个答案是对VS 2013,但步骤基本上为VS 2012年同这适用于通过运行ReSharper的单元测试功能 。

  1. 安装xUnit.net亚军为Visual Studio 2013(注意在运行Visual Studio作为管理员,或运行IDE作为一个非管理员时,测试可能无法运行):

    一个。 在Visual Studio 2013中,去工具 - >扩展和更新 - >在线

    湾 搜索xUnit.net亚军为Visual Studio 2012和2013

    C。 然后下载(安装)它。 如果从2012 VS升级到VS 2013,建议,这被卸载,然后重新安装。

    d。 重新启动Visual Studio。

  2. 如果安装了ReSharper,安装xUnit.net测试运行器插件:

    一个。 在Visual Studio 2013中,导航:ReSharper的 - >扩展管理器。

    湾 在左边,选择联机。

    C。 搜索“xunit.net”。 选择“xUnit.net测试支持”。 点击安装。

    d。 重新启动Visual Studio 2013。

  3. “清洁”的解决方案

    一个。 在IDE中,在Solution Explorer中,用鼠标右键单击该解决方案,并选择“清除”。

    湾 重新编译。

    C。 现在,当右键单击[Fact]属性,选择ReSharper的“运行单元测试”(而不是默认的“运行测试”)

故障排除与运行的xUnit:

  • 如果用的xUnit运行[事实]测试问题仍然存在,则可能需要手动从任何删除的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被拒绝。
    • ......与同为在该目录中的其他DLL

    要解决此问题,删除C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\目录从Visual Studio中卸载后,再运行Visual Studio作为一个非管理员,通过ReSharper的,并重新安装(ReSharper的 - >扩展管理器)



Answer 3:

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

如果您在发现或运行测试的问题,你可能会在Visual Studio中损坏的亚军缓存的受害者。 要清除这个缓存,关闭Visual Studio中的所有实例,然后删除该文件夹%TEMP%\ VisualStudioTestExplorerExtensions。 另外,请确保您的项目只针对Visual Studio的亚军NuGet包(xunit.runner.visualstudio)的一个版本链接。



Answer 4:

我在VS2017 RC同样的问题,.NET 1.1的核心项目。 更新xunit.runner工作对我来说,

Install-Package xunit.runner.visualstudio


Answer 5:

(正如评论提到了@Kyle对对方的回答)同样No tests found to run的消息可能会导致使用的NuGet得到xUnit.dll与2.0.0版本结束了(这是目前被标记为一些如抢鲜核心功能像V1测试等尚未在该分支来实现)发现。

在这种情况下,分辨率是在NuGet包管理器中选择只有稳定的版本(而不是预发行包含 )。



Answer 6:

对我来说,我的测试类和测试方法的名称相结合太长; 的xUnit似乎对这个组合一定上限。

只是缩短允许的xUnit地发现,单一测试的测试方法的名称。 缩短允许的xUnit整个班级的名称,发现在类的所有测试。

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



Answer 7:

在我的情况下,为了看到任何检验,我必须完成以下步骤:

(通过NuGet包管理器中安装的所有)

  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高级版。 (ReSharper的没有安装)



Answer 8:

我一直有一段时间了,其中一个测试类或测试方法不被发现使用.NET的核心这个问题。 下面的修复工作对我来说:

  1. 打开命令提示窗口。
  2. 更改为项目目录。
  3. 建立运行以下命令的项目:

     dotnet build 

注:从Visual Studio.NET建筑将无法正常工作! <<<<<<<<<<< 重要!

  1. 运行测试:测试 - >运行 - >测试全部 - CTRL + R + A(这将发现新的测试(S) - 而不是运行新的测试(S)。
  2. 再次运行测试。


文章来源: Why is the xUnit Runner not finding my tests