为什么xUnit Runner没有找到我的测试

Rub*_*ink 63 unit-testing testdriven.net xunit.net visual-studio-2012

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

static class MyTestClass
{
    [Fact]
    static void MyTestMethod() 
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

VS 2012的xUnit插件说:

没有测试发现.

TestDriven.net运行得很好,但提到了Ad hoc:

1次传递,0次失败,0次跳过(参见"任务列表"),耗时0.47秒(Ad hoc)

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

(我已xunit.runner.visualstudio安装,VS正在进行一些测试.)

是什么赋予了?

Rub*_*ink 95

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


出于效率的原因,xUnit作者选择BindingFlags.NonPublic在流道中搜索测试类时不使用(MSIL元数据表不会将private(/ internal)类索引到相同的程度,因此相对效率存在显着的性能差异,因此可以实现反思).

由于上述原因,你classprivate意思是它不会被捡起来.

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

请注意,Visual Studio xUnit Runner扩展,xunit.console.exe(和GUI),xunitMSBuild任务,Resharper和CodeRush都符合这一点(尽管可以说他们[特别是后两者]可以在测试类(即类)时做更多的标记[可能间接地]包含 - Fact来自传播的annoations)是private).

TestDriven.net运行测试的原因是TestDriven.net的作者已经付出了巨大努力使其成为Just Work.它在内部使用一个特殊的Test Runner包装器/垫片(称为Adhoc Runner)来运行测试.请注意,该方法实际上并非通过xUnit.net运行器运行,因此您在测试中放置的任何具有副作用的属性都不会被触发.

值得注意的是NUnit(我很确定MSTest)确实使用了私有反射[并因此在private课堂上进行了测试],这可能就是为什么你以前从未担心它的重要性.

注意:由此启用的副作用/技巧是您可以将测试类private作为Skip在测试类[和任何嵌套类] 中ping所有测试的快速方法.(可悲的是,这个星球上的这种情况被无意中使用的数量远远超过了这个故意的情况!)

  • 我遇到了同样的问题,我的课程是公开的,尝试将 MS 测试运行程序与 Visual Studio 扩展 xUnit 测试运行程序与 VS 2012 一起使用 (2认同)

CJB*_*JBS 43

这个答案适用于VS 2013,但VS 2012的步骤基本相同.这适用于通过ReSharper的单元测试功能运行.

  1. 为Visual Studio 2013安装xUnit.net运行器(小心以管理员身份运行Visual Studio,或者以非管理员身份运行IDE时可能无法运行测试):

    一个.在Visual Studio 2013中,转到"工具" - >"扩展和更新" - >"在线"

    湾 搜索Visual Studio 2012和2013的xUnit.net运行器

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

    d.重新启动Visual Studio.

  2. 如果安装了ReSharper,请安装xUnit.net test runner插件:

    一个.在Visual Studio 2013中,导航:Resharper - > Extension Manager.

    湾 在左侧,选择在线.

    C.搜索"xunit.net".选择"xUnit.net Test Support".单击安装.

    d.重新启动Visual Studio 2013.

  3. "清理"解决方案

    一个.在IDE中,在"解决方案资源管理器"中,右键单击解决方案,然后选择"清除".

    湾 重新编译.

    C.现在,右键单击[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 Test Support).我注意到一次卸载时,一些错误信息闪过.我抓住了一个屏幕截图,它列出了:

    • 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 - > Extension Manager)


Dan*_*man 18

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

如果您在发现或运行测试时遇到问题,则可能是Visual Studio中损坏的运行器缓存的受害者.要清除此缓存,请关闭所有Visual Studio实例,然后删除文件夹%TEMP%\ VisualStudioTestExplorerExtensions.还要确保您的项目仅链接到单个版本的Visual Studio runner NuGet包(xunit.runner.visualstudio).


Dha*_*777 13

我在VS2017 RC,.NET核心1.1项目中遇到了同样的问题.更新xunit.runner为我工作,

Install-Package xunit.runner.visualstudio
Run Code Online (Sandbox Code Playgroud)


小智 6

(正如@Kyle在另一个答案的评论中所提到的)No tests found to run使用NuGet获取xUnit.dll并最终获得版本2.0.0(目前标记为预发行版,因为某些核心功能,如发现v1测试等尚未在该分支中实施).

这种情况下的解决方案是在NuGet包管理器中选择Stable Only版本(而不是Include Prerelease).


mka*_*kaj 5

我在 .NET Core 上遇到这个问题已经有一段时间了,没有发现测试类或测试方法。以下修复对我有用:

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

    dotnet build
    
    Run Code Online (Sandbox Code Playgroud)

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

  1. 运行测试:测试 --> 运行 --> 测试全部 - CTRL+R +A (这将发现新测试 - 但不会运行新测试。
  2. 再次运行测试。