6

I would like to create integration test in which Spring Boot will read a value from .properties file using @Value annotation.
But every time I'm running test my assertion fails because Spring is unable to read the value:

org.junit.ComparisonFailure: 
Expected :works!
Actual   :${test}

My test:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebTests.ConfigurationClass.class, WebTests.ClassToTest.class})
public class WebTests {
    @Configuration
    @ActiveProfiles("test")
    static class ConfigurationClass {}

    @Component
    static class ClassToTest{
        @Value("${test}")
        private String test;
    }

    @Autowired
    private ClassToTest config;

    @Test
    public void testTransferService() {
        Assert.assertEquals(config.test, "works!");
    }
}

application-test.properties under src/main/resource package contains:

test=works! 

What can be the reason of that behavior and how can I fix it?
Any help highly appreciated.

1
  • 1
    What does ClassToTest look like? Have you got @SpringBootTest anywhere? It would guess that your tests aren't running as a Spring Boot test so application properties isn't being loaded. If that was happening, setting the active profile to test should have been sufficient to get application-test.properties to load Commented Feb 22, 2017 at 16:58

2 Answers 2

7

You should load the application-test.properties using @PropertySource or @TestPropertySource

@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(locations="classpath:application-test.properties")
@ContextConfiguration(classes = {WebTests.ConfigurationClass.class, WebTests.ClassToTest.class})
public class WebTests {

}

for more info: Look into this Override default Spring-Boot application.properties settings in Junit Test

Sign up to request clarification or add additional context in comments.

Comments

5

Besides the above marked correct answer, there is another nature way to load application-test.properties: Set your test run "profile" to "test".

Mark your test cases with:

@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)

application-xxxx.properties is a naming convention for properties of different "profile".

This file application-xxxx.properties should be placed in src/main/resources folder.

"Profile" is also useful in bean configuration.

1 Comment

application-test.properties should be in src/test/resources folder

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.