在测试xml资源之前阅读spring属性源
在spring boot 1.4中,在主类中我有一个导入xml资源的配置类。在测试xml资源之前阅读spring属性源
@ImportResource("classpath:app-config-c3p0.xml")
在src/test/resources/application.properties
我所提供的属性
datasource.database.master.pool-size=1
但我仍然面临着问题,我试图添加顺序和@PropertySource
也@TestPropertySource
,但没有一次成功。
以下是例外
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [int] for property 'maxPoolSize'; nested exception is java.lang.NumberFormatException: For input string: "${datasource.database.master.pool-size}"
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:596)
at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:216)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1532)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1491)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1231)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
... 54 common frames omitted
Caused by: java.lang.NumberFormatException: For input string: "${datasource.database.master.pool-size}"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:569)
at java.lang.Integer.valueOf(Integer.java:766)
at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:208)
at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113)
at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:468)
at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:441)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:199)
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)
... 60 common frames omitted
它的正常工作的性质从春季云配置服务器读取未运行测试时。
以下是测试案例
@WebMvcTest(VCController.class)
@RunWith(SpringRunner.class)
@TestPropertySource("classpath:test.properties")
public class VCControllerTest {
@MockBean
private VCGateway vCGateway;
@Autowired
private MockMvc mvc;
@Test
public void testCreateVoucher() throws Exception {
int timeout = 10;
CreateVC createVC = new CreateVC(timeout);
CreatedVCModel createdVCModel = new CreatedVCModel();
given(vCGateway.create(createVC)).willReturn(createdVCModel);
mvc.perform(post("/v1/vc")
.content(json(createVC))
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated());
}
}
是否尝试在您的java配置文件中添加PropertySourcesPlaceholderConfigurer
bean以解析@Value注释中的$ {...}表达式。
通过添加该内部类:
@Configuration
public static class TestContext{
@Bean
public static PropertySourcesPlaceholderConfigurer properties(){
return new PropertySourcesPlaceholderConfigurer();
}
}
如果需要添加@ContextConfiguration(装载机= AnnotationConfigContextLoader.class)到您的VCControllerTest
测试类加载@Configuration类。
感谢您的帮助! ,但是我必须做一些改变而不是'PropertyPlaceholderConfigurer'我必须使用'PropertySourcesPlaceholderConfigurer',因为一些属性没有加载,我在文档中发现它首选使用'PropertySourcesPlaceholderConfigurer'。其次,它没有添加'@ContextConfiguration',为什么你认为我应该添加它? – Ahmed
提到的@ContextConfiguration是一个开销,因为它被弹簧引导自动配置覆盖,所以..你可以放弃它。 –
好的,所以我已经删除它 – Ahmed
正常时该属性没有得到解决,就会出现此错误。
添加resources
目录下的src/test/resources
为您的测试属性,应该工作。
Typo在我身边,application.properties的路径是'src/test/resources'。仍然不工作:(。 – Ahmed
其中是app-config-c3p0.xml位于? – dimitrisli
它在'src/main/resources'。我只想覆盖env属性。 – Ahmed
添加您的测试用例。 –
@ M.Deinum Testcase添加。 – Ahmed