TL;DR 你的测试类必须是public
(但你的测试方法可以是private
和/或static
)
出于效率的原因,xUnit 作者选择BindingFlags.NonPublic
在运行器中搜索测试类时不使用(MSIL 元数据表不会以相同程度索引private
(/ internal
) 类,因此相对效率存在显着的性能差异,即因此可以实现反射)。
由于上述原因,您的class
isprivate
意味着它不会被拾取。
private
测试方法很好而且很好的事实static
- 自 1.0 以来的 xUnit 设计支持这两个方面。
请注意,Visual Studio xUnit Runner 扩展xunit.console.exe
(和 GUI)、xunit
MSBuild 任务、Resharper 和 CodeRush 在遵守这一点方面都是一致的(尽管可以说它们 [尤其是后两者] 可以在测试类(即类[可能间接地]包含Fact
-派生的注释)是private
)。
TestDriven.net 运行您的测试的原因是 TestDriven.net 的作者已经付出了巨大的努力来使其正常工作。它在内部使用一个特殊的 Test Runner 包装器/垫片(称为 Adhoc Runner)来运行您的测试。请注意,该方法实际上并未通过 xUnit.net 运行程序运行,因此您在测试中放置的任何具有副作用的属性都不会被触发。
值得注意的是,NUnit(我很确定 MSTest)确实使用了私有反射 [因此在private
课堂上进行测试],这可能就是为什么它似乎从来没有让你担心过重要的事情。
注意:由此启用的副作用/技巧是,您可以创建一个测试类private
作为Skip
ping 测试类 [和任何嵌套类] 中所有测试的快速方法。(可悲的是,在这个星球上,无意中使用这个的案例远远超过了有意使用的案例!)