gpt4 book ai didi

java - JUnit 工具类包

转载 作者:行者123 更新时间:2023-12-04 06:30:25 25 4
gpt4 key购买 nike

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

我需要编写一些样板代码以方便编写测试类。比如不配置Resin服务器就连接数据库,使用JNDI注入(inject)。

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

编辑:

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

最佳答案

这是我为基于 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.javautil子目录,但恕我直言,第一个公共(public)父包( com.example 在这种情况下)是更好的选择。我还建议您创建基础摘要 AbstractTest类与实用程序一起共享通用测试样板。

还要注意我放置测试资源的位置(本示例中的 Spring 上下文配置)。这样,您只需发出以下命令即可轻松访问一些测试数据(XML、SQL 等):
getClass().getResource("someFile.txt")

如果您在 com.example.foo.FooTest , 上面的语句将从 src/test/resources/com/example/foo/someFile.txt 加载文件自动地。

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

关于java - JUnit 工具类包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5488205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com