1

我一直在查看一个特定的开源库,其中所有单元测试都定义为它们测试的类中的静态嵌套类,例如:

public class Foo {

    public int bar() { ... }

    public static class UnitTest {
        @Test
        public void testBar() { ... }
    }
}

我以前从未见过这样做的项目或 Java 代码库,我真的很好奇它背后的想法。

  • FooTest与在另一个源文件夹中拥有一个单独的类相比,这种模式有什么优势src/test/java吗?

  • 这是使用Gradle作为构建工具的项目惯例吗?

4

2 回答 2

5

正如 Jon Skeet 建议的那样,我在相关项目的文档中找到了答案:

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

为什么?

  • 低摩擦
  • 语境
  • 封装
  • 重构
  • 自我记录

关于推理的更多信息可以在这篇博客文章中找到:JUnit Tests as Inner Classes

于 2013-03-15T17:52:10.207 回答
2

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

  • 它使您的 Java 类非常庞大且笨拙。
  • 最终的 jar 文件将包含测试代码,这在生产运行时可能是不必要的,并且通常不是一个好的做法(将生产代码与测试代码分开)。

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

于 2013-03-15T17:55:32.043 回答