1

我想在 src/test/java 的测试工具中使用我的 src/main/resources 目录中的 applicationContext.xml。我如何加载它?我努力了:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class TestService {
...
}

但得到一个文件未找到错误。我正在使用 Maven 和 Spring。谢谢。

4

4 回答 4

3

试试这个(注意星号):

@ContextConfiguration("classpath*:applicationContext.xml")
于 2013-06-04T19:59:17.230 回答
2

Maven 测试类路径使用target/test-classes. 该文件夹包含来自 的 Java 类src/test/java和来自src/test/resources.

要走的路是创建一个测试特定的应用程序上下文并将其存储在src/main/resources.

file:您可以尝试使用ie直接引用该文件,file:src/main/resources/applicationContext.xml但对我来说这是一个丑陋的 hack。

此外,您当然可以在测试执行之前使用Maven 资源插件进行复制。applicationContext.xml

于 2013-06-04T18:35:50.650 回答
1

这就是我的做法,它可能对你来说是最好的,也可能不是。最主要的是它在 Eclipse 和 Maven 中都有效:

  • 每个项目只保留每个applicationContext-xxx.xml文件的一份副本。永远不要复制粘贴它们或它们的内容,它会造成维护的噩梦。

  • 将所有环境设置外部化到属性文件(例如database-prod.propertiesdatabase-test.properties)并将它们分别放在src/main/resourcessrc/test/resources中。将此行添加到您的应用程序上下文中:

    < context:property-placeholder location="classpath:**/*.properties"/>

  • 为所有测试类创建一个超类并使用上下文配置对其进行注释:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@Ignore
public class SpringEnabledTest {

  // Inheritable logger
  protected Logger logger = LoggerFactory.getLogger(this.getClass());

}
  • 添加<additionalClasspathElements>到您的maven-surefire-plugin配置中以确保surefire 选择appContext 和正确的属性文件。我在这里创建了一个示例。

  • 将应用程序上下文文件的位置添加src/test/resources到您的 Eclipse 类路径中,以便您也可以在 Eclipse 中执行单元测试。

  • 永远不要添加src/main/resources到您的 Eclipse 类路径中,它只是 Maven 打包其他源文件的方便位置,它应该与 Eclipse 无关。我经常将此目录留空,并在该文件夹之外创建其他文件夹(例如 env/DEV、env/UAT 和 env/PROD),src/并将参数传递给构建服务器并让它知道需要从哪个文件夹将文件复制到src/main/resources.

于 2013-06-05T01:32:10.890 回答
0

将 src 文件夹添加到测试工具的类路径中。如果它在 Eclipse 中,我认为您可以从项目属性中完成。您可能还必须将其更改为 classpath:**/applicationContext.xml。

于 2013-06-04T18:35:26.790 回答