我应该把我的JUnittesting放在哪里?

我有两个关于组织unit testing的问题。

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

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

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

我们做JUnittesting用例的方式是将它们放在同一个包中,但放在不同的根目录中。 由于我们使用Maven,我们只是使用标准的位置,使结构类似于以下。

src/main/java/com/foo/Bar.java src/test/java/com/foo/BarTest.java 

显然结构还有更多,但是这可以让我们与主线代码分开构buildtesting,但仍然访问受保护的类等。 对于不同types的testing,这是非常主观的。 当我们开始我们的testing工作(不幸的是在开发之后开始的),我试图让事情相当孤立。 不幸的是,当我们达到500多个testing案例时,它很快就变成了一场噩梦。 自那以后,我试图做更多的合并。 这导致维护的代码量减less。 正如我所说,这是非常主观的。

至于纯testing代码,我们将它保存在一个单独的com.foo.test包中,该包仅驻留在src/test/java树中。

testing类应该放在不同的包中,当你把它打包发布的时候,把它和生产代码分开是比较容易的。 我通常会在这些软件包,各种模拟,configuration,场景中保留大量的testing绒毛。但是当你build立 – 它不明白。 在某些情况下,将testing内容保存在不同的项目中是一个好主意。 依靠。

我也倾向于将我的testing放在同一个软件包中,但在不同的根目录下。 这允许我testing包私有类或访问包装私有类,而在包中testing其他东西。 它们被保存在一个单独的目录树中,允许从部署的结果中排除它们(特别是确保testing代码不会意外地进入生产代码)。 然而,最重要的是适合你的情况。

就每个生产级别的testing类别数而言,我所看到的理论是每个灯具编写一个testing类,即每个安装结构。 在许多情况下,对于每个生产类而言,一个testing类是相同的(或足够接近),但是我有时为一个生产类编写了更多的testing类(特别是相等testing往往是分开的),偶尔也会有一个testing类对于一组(相关的)生产类(比如testing策略模式)。

大多数情况下,我并不太在意这个理论,而是根据需要重新进行testing,以保证复制到最低限度。

保持它相同的包允许你使用包隐私的可见性的代码,只打算通过testing访问。

关于使用单独的根目录,这是一个好的做法。 这对我们也有好处,因为我们使用IDEA,IDEA认识到生产代码不能引用testing代码。

在保持它们分开的情况下,在单元级别上每个生产级别有一个且仅有一个testing类别是很有力量的。 当然,有些类在生产过程中被创build为重构的一部分,根本没有testing类,这很好,但是当你想知道什么testingtesting某个类时,有一个约定ClassNameTest是ClassName的testing是非常有帮助的。

尽pipeTestNG比JUnit更加友好。