我一直在查看a particular open source library,其中所有单元测试都被定义为他们测试的类中的静态嵌套类,例如:
public class Foo {
public int bar() { ... }
public static class UnitTest {
@Test
public void testBar() { ... }
}
}
我以前从未见过这样做的项目或Java代码库,而且我对它背后的想法非常好奇。
这个模式是否比在另一个源文件夹FooTest
中使用单独的src/test/java
类有任何优势?
这是使用Gradle作为构建工具的项目惯例吗?
答案 0 :(得分:5)
正如Jon Skeet建议的那样,我找到了问题的答案within the documentation of the project:
Hystrix将其所有单元测试作为内部类而不是单独的/ test /文件夹。
为什么?
- 低摩擦力
- 上下文
- 封装
- 重构
- 自文档
有关推理的更多信息,请参阅此博客文章:JUnit Tests as Inner Classes
答案 1 :(得分:2)
除了访问私有成员之外,将单元测试编写为嵌套内部类似乎没有任何优势。我能想到的缺点是:
另外,根据Java plugin的Gradle文档,它建议在src / test / java中保留测试,所以我认为这根本不是Gradle特定的约定。