将单元测试嵌套在它测试的类中而不是在另一个(外部)类中的目的是什么?

时间:2013-03-15 17:14:23

标签: java unit-testing junit

我一直在查看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作为构建工具的项目惯例吗?

2 个答案:

答案 0 :(得分:5)

正如Jon Skeet建议的那样,我找到了问题的答案within the documentation of the project

  

Hystrix将其所有单元测试作为内部类而不是单独的/ test /文件夹。

     

为什么?

     
      
  • 低摩擦力
  •   
  • 上下文
  •   
  • 封装
  •   
  • 重构
  •   
  • 自文档
  •   
     

有关推理的更多信息,请参阅此博客文章:JUnit Tests as Inner Classes

答案 1 :(得分:2)

除了访问私有成员之外,将单元测试编写为嵌套内部类似乎没有任何优势。我能想到的缺点是:

  • 它让你的Java课程变得非常昂贵而且很笨拙。
  • 最终的jar文件中将包含测试代码,这在生产运行时可能是不必要的,并且通常不是一个好的做法(将生产代码与测试代码分开)。

另外,根据Java plugin的Gradle文档,它建议在src / test / java中保留测试,所以我认为这根本不是Gradle特定的约定。