我有2个关于组织单元测试的问题。我应该在哪里放置我的JUnit测试?
是否必须将测试放在与测试类相同的包中,还是可以在不同的包中组织测试?
例如,如果我有有效性和其他测试,是正确的将它们分割成不同的包,即使他们是同一类?
模拟和存根类怎么样?我应该将它们与仅包含测试的软件包分开,还是将它们放在一起?
我有2个关于组织单元测试的问题。我应该在哪里放置我的JUnit测试?
是否必须将测试放在与测试类相同的包中,还是可以在不同的包中组织测试?
例如,如果我有有效性和其他测试,是正确的将它们分割成不同的包,即使他们是同一类?
模拟和存根类怎么样?我应该将它们与仅包含测试的软件包分开,还是将它们放在一起?
我们做JUnit测试用例的方式是将它们放在同一个包中,但放在不同的根目录中。由于我们使用Maven,因此我们只使用标准位置,使结构类似于以下内容。
src/main/java/com/foo/Bar.java
src/test/java/com/foo/BarTest.java
显然有更多的结构,但是这让我们从主线代码分别建立测试,但仍然可以访问受保护类等。对于不同类型的测试,这是非常主观的。当我们开始我们的测试工作(不幸在开发之后开始)时,我试图让事情相当孤立。不幸的是,当我们达到500多个测试案例时,它很快成为了一场噩梦。我从那以后试图做更多的合并。这导致维护的代码量减少。正如我所说,虽然这是非常主观的。
就测试专用代码而言,我们将其保存在仅存在于src/test/java
树中的单独com.foo.test
软件包中。
测试类应该放在不同的包中,当你打包发布时,它们更容易与生产代码分开。我通常会在这些软件包,各种嘲笑,配置,场景中保留大量测试绒毛。但是当您构建时 - 它不会得到它。在某些情况下,将测试内容保存在不同的项目中是一个不错的主意。依靠。
保持它相同的包允许您使用包私有的可见性代码,旨在通过测试访问的代码。
关于使用单独的根目录,这是一个很好的做法。它也对我们有利,因为我们使用IDEA,所以IDEA认识到生产代码不能引用测试代码。
在保持它们分开的情况下,在单元级别每个生产级别拥有一个且只有一个测试类是很有力量的。当然,有些类在生产过程中被创建为重构的一部分,根本没有任何测试类,这很好,但是当您想知道测试某个类的测试时,有一个表示ClassNameTest的约定是ClassName的测试是非常有帮助的。尽管如此,TestNG比JUnit更适合这种范式。
我也倾向于把我的测试放在同一个包中,但是在不同的根目录下。这允许我在测试包中的其他东西时测试包私有类或访问包装私有类。它们保存在一个单独的目录树中,以允许从部署的结果中排除它们(尤其是确保测试代码不会意外地进入生产代码)。然而,最重要的是适合你的情况。
就每个生产类别测试的类别数而言,我所看到的理论是每个灯具编写一个测试类,即每个安装结构。在许多情况下,每个生产类与一个测试类相同(或足够接近),但是我有时会为生产类编写更多的测试类(特别是相等测试趋向于分离),偶尔也会有一个测试类对于一组(相关的)生产类(比如测试战略模式)。
大多数情况下,我不太在意这个理论,但是根据需要重新进行测试,以将重复数量降到最低。
除了我们使用“src/com/foo/...”和“test/com/foo/...”之外,类似的东西除外。 – 2009-06-02 16:20:03