maven spring test应用程序上下文

时间:2013-06-04 18:17:59

标签: spring maven testing

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

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

但是找不到文件错误。我正在使用Maven和Spring。感谢。

4 个答案:

答案 0 :(得分:3)

试试这个(注意星号):

@ContextConfiguration("classpath*:applicationContext.xml")

答案 1 :(得分:2)

Maven测试类路径使用target/test-classes中的文件。该文件夹包含src/test/java中的Java类和src/test/resources中的资源。

要做的就是创建一个特定于测试的应用上下文,并将其存储在src/main/resources

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

此外,您当然可以在测试执行之前使用Maven resources plugin复制applicationContext.xml

答案 2 :(得分: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和正确的属性文件。我创建了一个示例here

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

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

答案 3 :(得分:0)

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