【问题标题】:Could not resolve placeholder property during integration test在集成测试期间无法解析占位符属性
【发布时间】:2016-02-20 16:52:20
【问题描述】:

我正在使用 spring 进行集成测试。

我有 AppA。这确实有属性文件来加载 bean 属性。对于单元测试,我创建了 AppATestContext 并使用 @propertySource 添加了此属性文件。此 AppA 的单元测试工作正常。

我已将 AppA-test.jar 包含到 BigApp 中。我正在尝试为 BigApp 编写单元测试。我已将 AppATestContext 包含到 BigApp 测试上下文中。现在,当我运行 bigApp 单元测试时,我收到“无法解决占位符错误”。

为什么,AppAtestContext 应该已经加载了属性正确的 bean?我在哪里失踪。

同时,如果我将 AppA 的属性文件包含到 BigApp 的占位符配置器中,它就可以工作了。

更新

AppAtestContext.java

@PropertySource("app.properties")
class AppTestContext{
//propertyPlaceholderConfigurer bean declaration.
}

BigAppTestContext.xml

<bean class="AppAtestContext.java"/>

BigAppTest.java

@ContextHierarchy{@ContextConfiguration={BigAppTestContext.xml})
class SomeTest{
}

此测试不会将 app.properties 放入 AppA 项目中定义的 bean。

【问题讨论】:

  • 在你的上下文bean中添加@Configurable,或者在你的xml中添加
  • 但是没有添加您的建议,AppA 中的所有单元测试都可以正常工作。
  • 您的 app.properties 在哪里?我感觉它在 .JAR 中,您的测试无法访问它。尝试在 app.properties 之前添加 classpath:/。
  • 是的,它在 AppA.jar 中。我认为我的路径正确,因为 AppA 的单元测试运行良好。

标签: spring


【解决方案1】:

由于您没有提供任何代码,我将提供一个通用的答案...

我所有的测试都使用这个配置运行,以确保隔离是完美的:

@RunWith(SpringJUnit4ClassRunner.class)
@Configurable
@ImportResource({ "classpath:/testContext-basic.xml" })

@ContextConfiguration(classes = { MyTest.class, AnyDependancy.class })

确保在上下文中包含您的测试,以便 Spring 扫描 bean。

testContext-basic 只是:

<context:annotation-config />

然后你就可以用:模拟你的豆子了:

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
}

@Bean
public MyMock getMyMock() {
    return Mockito.mock(MyMock.class);
}

【讨论】:

  • 我已经用一些代码 sn-p 更新了我的问题。如果你得到我,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 2020-02-18
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
相关资源
最近更新 更多