我应该在哪里进行JUnit测试?

Jak*_*old 49 java junit unit-testing

我有2个关于组织单元测试的问题.

  1. 我是否必须将测试放在与测试类相同的包中,还是可以在不同的包中组织测试?

    例如,如果我有有效性其他测试,将它们分成不同的包是否正确,即使它们是同一个类?

  2. 模拟和存根类怎么样?我应该将它们与仅包含测试的包分开,还是将它们放在一起?

Pau*_*all 63

我们执行JUnit测试用例的方法是将它们放在同一个包中,但是放在不同的根目录中.由于我们使用Maven,我们只使用标准位置,使结构类似于以下.

src/main/java/com/foo/Bar.java
src/test/java/com/foo/BarTest.java
Run Code Online (Sandbox Code Playgroud)

显然,结构还有更多,但这可以让我们与主线代码分开构建测试,但仍然可以访问受保护的类等.对于不同类型的测试,这是非常主观的.当我们开始我们的测试工作(不幸的是在开发之后开始)时,我试图让事情相当孤立.不幸的是,当我们达到500+测试用例点时,它很快就变成了一场噩梦.我已经尝试过更多的整合.这导致维护的代码量减少.正如我所说,这是非常主观的.

对于仅测试代码,我们将其保存在com.foo.test仅驻留在src/test/java树中的单独包中.

  • 类似的事情除了我们使用"src/com/foo/..."和"test/com/foo/..."之外. (13认同)
  • 老实说,我使用src/main/java和src/test/java的唯一原因是我不需要对Maven进行任何额外的配置. (4认同)

Kat*_*one 5

我也倾向于将测试放在相同的程序包中,但放在不同的根目录下。这使我可以在测试包中的其他内容时测试包专用类或访问包装专用类。它们被保存在单独的目录树中,以允许从部署结果中排除它们(特别是确保测试代码不会意外进入生产代码)。但是,最重要的是适合您的情况。

就每个生产类有多少个测试类而言,我所看到的理论是,您为每个夹具(即每个安装结构)编写一个测试类。在许多情况下,每个生产类都与一个测试类相同(或足够接近),但是我有时为给定生产类编写更多的测试类(特别是相等性测试),偶尔为生产类编写一个测试类。针对一组(相关)生产类别(例如,用于测试策略模式)。

通常,我不必为理论过多担心,但可以根据需要对测试进行重新设计,以将重复次数降至最低。