lundi 5 décembre 2016

Read spring property source before xml resource in test

In spring boot 1.4, in the main class I've a configuration class which imports xml resource.

@ImportResource("classpath:app-config-c3p0.xml")

In the src/test/resources/application.properties I have provided the property for

datasource.database.master.pool-size=1

But I'm still facing issue, I tried to add order and @PropertySource also @TestPropertySource but none of them worked.

Following is the exception

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

It's working fine when not running tests as the properties are read from spring cloud config server.

Following is the test case

@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());
    }



}

Aucun commentaire:

Enregistrer un commentaire