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

问题描述 投票:0回答:2

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

public class Foo {

    public int bar() { ... }

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

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

  • 与在另一个源文件夹中拥有单独的

    FooTest
    类相比,这种模式有什么优势吗
    src/test/java

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

java unit-testing junit
2个回答
6
投票

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

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

为什么?

    低摩擦
    背景
  • 封装
  • 重构
  • 自我记录
有关推理的更多信息可以在这篇博文中找到:

JUnit 测试作为内部类


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

    它让你的 Java 类显得又大又笨重。
  • 最终的 jar 文件中将包含测试代码,这在生产运行时可能是不必要的,并且通常不是一个好的做法(将生产代码与测试代码分开)。
此外,根据

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

© www.soinside.com 2019 - 2024. All rights reserved.