我有2个有关组织单元测试的问题。
我是否需要将测试代码放在与被测试类相同的包中,或者可以将测试代码组织到不同的包中?
例如,如果我有有效性(validity)和其他(other)测试,即使它们是为同一个类编写的,将它们分成不同的包中是否正确?
那么模拟和存根类呢?我应该将它们与仅包含测试的包分开,还是将其放在一起?
我有2个有关组织单元测试的问题。
我是否需要将测试代码放在与被测试类相同的包中,或者可以将测试代码组织到不同的包中?
例如,如果我有有效性(validity)和其他(other)测试,即使它们是为同一个类编写的,将它们分成不同的包中是否正确?
那么模拟和存根类呢?我应该将它们与仅包含测试的包分开,还是将其放在一起?
我们进行 JUnit 测试用例的方式是将它们放在同一个包中,但是放在一个不同的根目录下。由于我们使用 Maven,因此只需使用标准位置即可,使结构类似于以下内容。
src/main/java/com/foo/Bar.java
src/test/java/com/foo/BarTest.java
显然,这个结构还有更多细节,但是它使我们能够将测试与主要代码分开构建,同时访问受保护的类等内容。关于不同类型的测试,这非常主观。当我们开始进行测试(不幸的是,在开发之后),我试图让事情保持相对独立。不幸的是,当我们达到500多个测试用例时,它很快变成了一场噩梦。此后我尝试做更多的合并,这导致了更少的代码维护量。正如我所说的,这非常主观。
至于仅用于测试的代码,我们将其保留在一个单独的com.foo.test
包中,该包位于 src/test/java
树中。
测试类应该放在不同的包中,这样在打包发布时就容易将其与生产代码分开。我通常会在这些包中保留大量测试用例,包括各种模拟对象、配置和场景等。但是,在构建过程中,这些内容并不会被编译。在某些情况下,甚至可以将测试相关的内容放在不同的项目中,这要视具体情况而定。