【问题标题】:maven spring test application contextsMaven 弹簧测试应用程序上下文
【发布时间】:2013-06-04 18:17:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: spring maven testing


    【解决方案1】:

    试试这个(注意星号):

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

    【讨论】:

    • classpath* 搜索类路径上的所有条目。这将包含来自src/main/resourcesapplicationContext.xml 的目录。它还将在类路径上搜索 jar。
    • 非常好,干净的解决方案。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我想使用它将运行的确切 applicationContext.xml 进行测试。对我来说,它验证了上下文文件。
    • 这很好,但您应该通过集成测试而不是单元测试来做到这一点。
    • 嗯,你让我思考了。单元测试与集成测试。你知道我可以在哪里阅读更多关于这些的信息吗?谢谢。
    【解决方案3】:

    这就是我的做法,它可能对你来说是最好的,也可能不是。最主要的是它在 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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-21
        • 2019-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 2016-12-13
        • 2018-10-26
        相关资源
        最近更新 更多