当我最近在我们的代码中添加更多的单元测试时,我被一个简单的问题卡住了。
我需要编写一些样板代码来简化测试类的编写。例如,在没有配置Resin服务器的情况下,使用JNDI注入连接到数据库。
我的问题是:我可以把只与测试相关的样板代码放在哪里?当然,它需要在我的test目录中,但是在我的包树中创建一个包,称之为"tool“是不是一种好的做法,因为这个包在项目源代码的包树中没有对应的包?为什么或者为什么不?
编辑:
让我们举个例子:我需要创建一个类来将数据库连接注入到我的测试类中。让我们称它为JNDIDatabaseInjector。这个类显然只用于测试目的,因为生产中使用的数据库连接是在应用服务器配置中定义的。我最好将我的JNDIDatabaseInjector类放在哪个包中?
发布于 2011-03-31 00:20:39
这是我推荐给基于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加载文件。
此目录布局可防止包之间的兄弟依赖(仅限子->父或父->子)。不知道为什么,但感觉好多了。当您想要在maven工件之间共享测试实用程序时,真正的问题出现了--这是maven的约定重于配置方法的最大缺陷之一。
发布于 2011-03-30 23:31:09
我将我所有的for-release包放在一个src Source文件夹中(在Eclipse中)。所有的junit都放在test-src Source文件夹中。这使得分离测试代码并只发布要发布的包变得很简单。
因此,它可能看起来像这样:
MyProject
- src
+ com.mycompany.tool
- test-src
- com.mycompany.tool
TestBed.java在进行设置时,您可能需要查看mockito以创建样板。
https://stackoverflow.com/questions/5488205
复制相似问题