单元测试 - Spring 的属性占位符不适用于 jUnit 测试



我刚刚在Spring配置中配置了一个属性占位符

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

如果我用这个配置运行应用程序,一切都很好。但是,如果我尝试运行单元测试,由于FileNotFoundException,测试无法加载ApplicationContext。如果我尝试从Eclipse运行测试以及通过maven运行测试,就会发生这种情况。

我也尝试直接配置PropertyPlaceholderConfigurer,结果相同。

尽管用

注释了测试类,但文件似乎不在类路径位置。
 @ContextConfiguration("classpath:/config/spring-config.xml")

文件在同一个文件夹中,它找到XML配置。

我已经尝试使用不同的路径:classpath:config/config.properties和没有类路径前缀,都不工作。带file前缀的绝对路径可以,但这不是一个好的解决方案。

是否有办法使属性占位符与测试一起工作?我已经找到的一个解决方案是通过在xml中提供默认属性来覆盖位置。还有其他解决办法吗?还是只有我有这个问题?

我的测试类看起来像这样:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/config/spring-config.xml")
@Transactional
public class JpaImageDaoTest {
@Autowired
private ImageDataDao imageDataDao;
@Test
public void testFindById() {
    Image anImage = new Image();
    anImage.setData(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 });
    imageDao.save(anImage);
    Image image = imageDao.findById(imageData.getId());
    assertNotNull(image);
    assertEquals(anImage, image);
}

和上下文XML看起来像这样:

 <context:property-placeholder location="classpath:/config/config.properties" />
 <bean id="imageScalingService" class="service.image.ImageScalingService">
    <property name="maxWidth" value="${scaling.thumbnail.maxWidth}" />
    <property name="maxHeight" value="${scaling.thumbnail.maxHeight}" />
</bean>

我终于找到了一个解决方案/解决方案

似乎Spring不喜欢混淆XML和Java配置,或者至少在这种情况下它不起作用。我用4.0.9测试了这个

我没有在@ContextConfiguration中使用XML文件,而是引用了一个包含@PropertySource注释的Java配置类。

@Configuration
@PropertySource("test.properties")
@ImportResource("webservices.xml")
public class TestPlaceholderConfig {
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestPlaceholderConfig.class, WebServiceConfig.class})
public class MyTest {
}

奇怪的是,webservices.xml还包含WebServiceConfig类的bean定义。但是,Spring无法找到Java配置中定义的bean。因此我必须将WebServiceConfig.class添加到测试类的ContextConfiguration中。

我认为如果它是一个maven项目,那么属性文件应该在src/test/resource/config文件夹中。因为在运行测试用例时,测试的类路径是src/test/resource/config。尝试将配置文件放在测试用例类路径

配置文件在哪个文件夹中。属性定位?如果您遵循标准的maven文件夹结构,它应该在src/main/resources/config/config中。属性

相关内容

  • 没有找到相关文章

最新更新