我应该在测试期间模拟 Spring Cloud Config 服务器属性吗?
Should I mock Spring Cloud Config server properties during tests?
如何测试将 spring 云配置服务器的属性作为依赖项注入其中的服务?
- -我是否在测试期间使用 new 关键字简单地创建自己的属性?(new ExampleProperties())
- 或者我是否必须使用 spring 并创建某种测试属性并使用配置文件来判断要使用哪些属性?
- 或者我应该让 spring 在测试期间调用 spring 云配置服务器吗?
我的服务如下所示:
@Service
class Testing {
private final ExampleProperties exampleProperties
Testing(ExampleProperties exampleProperties) {
this.exampleProperties = exampleProperties
}
String methodIWantToTest() {
return exampleProperties.test.greeting + ' bla!'
}
}
我的项目在启动期间调用 spring 云配置服务器以获取属性,这是通过在 bootstrap.properties
上设置以下内容启用的:
spring.cloud.config.uri=http://12.345.67.89:8888
我的配置如下所示:
@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
}
}
属性文件如下所示:
foo=hello
bar=15
test.greeting=Hello world!
对于单元测试,只需简单地模拟属性并使用 Mockito 方法 when(mockedProperties.getProperty(eq("propertyName")).thenReturn("mockPropertyValue") 就可以了。
对于集成测试,所有 Spring 上下文都应该被初始化并作为常规应用程序工作,在这种情况下,您不需要模拟您的属性。
您可以在测试期间使用 @TestPropertySource annotation 伪造属性:
@ContextConfiguration
@TestPropertySource(properties = { "timezone = GMT", "port: 4242" })
public class MyIntegrationTests {
// class body...
}
另一种选择是使用 SpringBootTest 注解的 properties 属性:
@SpringBootTest(properties = {"timezone=GMT", "port=4242"})
如何测试将 spring 云配置服务器的属性作为依赖项注入其中的服务?
- -我是否在测试期间使用 new 关键字简单地创建自己的属性?(new ExampleProperties())
- 或者我是否必须使用 spring 并创建某种测试属性并使用配置文件来判断要使用哪些属性?
- 或者我应该让 spring 在测试期间调用 spring 云配置服务器吗?
我的服务如下所示:
@Service
class Testing {
private final ExampleProperties exampleProperties
Testing(ExampleProperties exampleProperties) {
this.exampleProperties = exampleProperties
}
String methodIWantToTest() {
return exampleProperties.test.greeting + ' bla!'
}
}
我的项目在启动期间调用 spring 云配置服务器以获取属性,这是通过在 bootstrap.properties
上设置以下内容启用的:
spring.cloud.config.uri=http://12.345.67.89:8888
我的配置如下所示:
@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
}
}
属性文件如下所示:
foo=hello
bar=15
test.greeting=Hello world!
对于单元测试,只需简单地模拟属性并使用 Mockito 方法 when(mockedProperties.getProperty(eq("propertyName")).thenReturn("mockPropertyValue") 就可以了。
对于集成测试,所有 Spring 上下文都应该被初始化并作为常规应用程序工作,在这种情况下,您不需要模拟您的属性。
您可以在测试期间使用 @TestPropertySource annotation 伪造属性:
@ContextConfiguration
@TestPropertySource(properties = { "timezone = GMT", "port: 4242" })
public class MyIntegrationTests {
// class body...
}
另一种选择是使用 SpringBootTest 注解的 properties 属性:
@SpringBootTest(properties = {"timezone=GMT", "port=4242"})