首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么xUnit运行器找不到我的测试

为什么xUnit运行器找不到我的测试
EN

Stack Overflow用户
提问于 2013-04-25 20:23:31
回答 8查看 63.8K关注 0票数 66

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

代码语言:javascript
复制
static class MyTestClass
{
    [Fact]
    static void MyTestMethod() 
    {
    }
}

VS 2012的xUnit插件说:

找不到要运行的测试。

TestDriven.net运行得很好,but mentions something about Ad hoc

1通过,0失败,0跳过(请参阅任务列表),耗时0.47秒(即席)

TeamCity、xunit.gui.exexunit.console.exe和Visual Studio也找不到TestMethod

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

怎么回事?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-04-25 20:24:28

您的测试类必须为public (但您的测试方法可以是private和/或static)

出于效率的原因,xUnit作者选择在运行器中搜索测试类时不使用BindingFlags.NonPublic (MSIL元数据表不会对private(/internal)类进行相同程度的索引,因此在反射可以实现的相对效率方面存在显著的性能差异)。

由于上面的原因,你的class is classis意味着它不会被提取。

测试方法是private static 这一事实在设计上是很好的,因为1.0已经同时支持了这两个方面。

请注意,Visual Studio扩展、xunit.console.exe (和图形用户界面)、xunit MSBuild任务、Resharper和CodeRush在遵守这一点上都是一致的(尽管可以说,当测试类(即可能间接包含Fact-derived注释的类)为private时,它们可以做更多的标记,特别是后两者)。

TestDriven.net运行您的测试的原因是,TestDriven.net的作者已经投入了大量的精力来使其正常工作。它在内部使用一个特殊的test Runner包装器/填充程序(称为Adhoc Runner)来运行您的测试。请注意,该方法实际上不是通过xUnit.net运行器运行的,因此您放在测试上的任何有副作用的属性都不会被触发。

值得注意的是,NUnit (以及我非常确定的MSTest)确实使用了私有反射,因此会在private类中选择测试,这可能就是为什么您以前不需要担心它的原因。

注意:由此带来的一个副作用/技巧是,您可以创建一个测试类private,作为对测试类和任何嵌套类中的所有测试执行Skipping的一种快捷方式。(可悲的是,在这个星球上,无意中使用这种方法的案例远远超过了有意使用这种方法的案例!)

票数 101
EN

Stack Overflow用户

发布于 2014-01-10 07:15:18

这个答案是针对VS2013的,但对于VS2012,步骤基本上是相同的。这适用于通过ReSharper's unit test functionality运行。

  1. 安装Visual Studio2013的xUnit.net运行器(请注意以管理员身份运行Visual Studio,否则在以非管理员身份运行xUnit.net时可能无法运行测试):

a.在Visual Studio2013中,转至Tools -> Extensions and Updates -> Online

b.搜索Visual Studio2012和2013的xUnit.net runner

c.然后下载(安装)它。如果从VS2012升级到VS2013,建议先卸载,然后再重新安装。

d.重启Visual Studio.

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

(注意:从ReSharper 2016.1开始,xunit support is built in to ReSharper,这意味着不再需要xunit插件。)

a.在Visual Studio2013中,导航: Resharper ->扩展管理器。

b.在左侧,选择Online。

c.搜索“xunit.net”。选择“xUnit.net测试支持”。单击Install。

d.重启Visual Studio2013。

  1. “清洁”解决方案

a.在IDE的“解决方案资源管理器”中,右击该解决方案,然后选择“清理”。

b.重新编译。

c.现在,当右键单击[Fact]属性时,选择Resharper的“Run Unit Tests”(相对于默认的“Run Tests”)

使用XUnit运行疑难解答:

  • 如果使用XUnit运行事实测试的问题仍然存在,则可能需要从以下任意/所有文件夹中手动删除xUnit包(查看xunit DLL的内容,如果找到,则删除xUnit文件夹):

代码语言:javascript
复制
- `C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\`
代码语言:javascript
复制
- `C:\Users\<username>\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\`

对于

  • ReSharper,请尝试卸载并重新安装xunitcontrib库(xUnit.net测试支持)。我注意到有一次卸载时,一些错误消息闪烁过去。我一度抓取了一个屏幕截图,它列出了:

代码语言:javascript
复制
- Access to the path `C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll` is denied.
- ... and the same for the other DLLs in that directory

要解决此问题,请在从Visual Studio卸载后删除C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\目录,然后以非管理员身份运行Visual Studio,并通过ReSharper (Resharper ->扩展管理器)重新安装

票数 43
EN

Stack Overflow用户

发布于 2016-10-19 16:09:51

来自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)的单个版本。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16214684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档