Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I mock Spring Cloud Config server properties during tests?

How do I test a service that has properties from spring cloud config server injected into it as a dependency?

  1. -Do I simply create my own properties during testing using the new keyword?(new ExampleProperties())
  2. Or do I have to use spring and create some kind of test properties and use profiles to tell which properties to use?
  3. Or should I just let spring call the spring cloud config server during testing?

My service looks like the one below:

@Service
class Testing {

    private final ExampleProperties exampleProperties

    Testing(ExampleProperties exampleProperties) {
        this.exampleProperties = exampleProperties
    }

    String methodIWantToTest() {
        return exampleProperties.test.greeting + ' bla!'
    }
}

My project makes a call to a spring cloud config server during start up to get properties, this is enabled by having the following on the bootstrap.properties:

spring.cloud.config.uri=http://12.345.67.89:8888

I have a configuration that looks like the one below:

@Component
@ConfigurationProperties
class ExampleProperties {

    private String foo
    private int bar
    private final Test test = new Test()

    //getters and setters

    static class Test {

        private String greeting

        //getters and setters
    }
}

The properties file looks like this:

foo=hello
bar=15

test.greeting=Hello world!
like image 795
Doug Avatar asked Jun 09 '17 08:06

Doug


2 Answers

You can use @TestPropertySource annotation to fake properties during test:

@ContextConfiguration
@TestPropertySource(properties = { "timezone = GMT", "port: 4242" })
public class MyIntegrationTests {
    // class body...
}
like image 119
luboskrnac Avatar answered Sep 18 '22 12:09

luboskrnac


For Unit test just simply mock Properties and use Mockito methods when(mockedProperties.getProperty(eq("propertyName")).thenReturn("mockPropertyValue") and it will be fine.

For Integration test all Spring context should be inited and work as regular app, in that case you dont need to mock your properties.

like image 40
vrudas Avatar answered Sep 21 '22 12:09

vrudas