JUnit工具类包

时间:2011-03-30 15:09:57

标签: java junit packages

由于我正在为我们的代码添加更多单元测试,因为一个简单的问题而陷入困境。

我需要编写一些样板代码,以便编写测试类。例如,要在没有配置Resin服务器的情况下连接到数据库,请使用JNDI注入。

我的问题是:我在哪里可以放置仅与测试相关的样板代码?当然,它需要在我的测试目录中,但是在我的包树中创建一个包,称之为“工具”是一个好习惯,因为这个包在项目源的包树中没有等价物?为什么或为什么不呢?

编辑:

让我们举个例子:我需要创建一个类来将数据库连接注入到我的测试类中。我们称之为JNDIDatabaseInjector。此类显然仅用于测试目的,因为生产中使用的数据库连接是在应用程序服务器配置中定义的。我应该在哪个包中最好地放置我的JNDIDatabaseInjector类?

2 个答案:

答案 0 :(得分:2)

这是我为基于maven的项目推荐的结构:

.
|-- src/
|   |-- main/
|   |   `-- java/
|   |       `-- com/
|   |           `-- example/
|   |               |-- bar/
|   |               |   `-- Bar.java
|   |               `-- foo/
|   |                   `-- Foo.java
|   `-- test/
|       |-- java/
|       |   `-- com/
|       |       `-- example/
|       |           |-- bar/
|       |           |   `-- BarTest.java
|       |           |-- foo/
|       |           |   `-- FooTest.java
|       |           |-- util/
|       |           |   `-- Util1.java
|       |           |-- AbstractTest.java
|       |           `-- Util2.java
|       `-- resources/
|           `-- com/
|               `-- example/
|                   |-- bar/
|                   |   `-- BarTest-context.xml
|                   `-- foo/
|                       `-- FooTest-context.xml
`-- pom.xml

正如您所看到的,我将Util1.java放在util子目录中,但恕我直言的第一个公共父包(在本例中为com.example)是更好的选择。我还建议您创建基本抽象AbstractTest类以及实用程序以共享通用测试样板。

另请注意我放置测试资源的位置(本示例中为Spring上下文配置)。这样,您只需发出以下命令即可轻松访问某些测试数据(XML,SQL等)。

getClass().getResource("someFile.txt")

如果您在com.example.foo.FooTest,则上述语句会自动从src/test/resources/com/example/foo/someFile.txt加载文件。

此目录布局可防止包之间存在兄弟依赖关系(仅 child - > parent parent - > child )。不知道为什么,但不知何故感觉好多了。当您想要在maven工件之间共享测试实用程序时,真正的问题就出现了 - 这是maven的配置约定方法的最大缺陷之一。

答案 1 :(得分:1)

我将所有的for-release软件包放在一个src源文件夹中(在Eclipse中)。所有junits都在test-src源文件夹中。这使得分离测试代码和仅释放要发布的包变得简单。

所以看起来像这样:

MyProject
- src
  + com.mycompany.tool
- test-src
  - com.mycompany.tool
    TestBed.java

在设置时,您可能需要查看mockito来创建样板。