我正在尝试为spring(-boot)应用程序中使用的某些元素设置单元测试,并且我在ConfigurationProperties
和EnableConfigurationProperties
周围进行设置。我最终让它工作的方式似乎与我见过的例子一致,因为我目睹了我的配置类需要ConfigurationProperties
和EnableConfigurationProperties
,而这种情况并非如此。似乎是正确的,我希望有人可以提供一些指导。
这是一个简化的例子:
JavaTestConfiguration.java
package com.kerz;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.constraints.NotNull;
@Configuration
@ConfigurationProperties
@EnableConfigurationProperties
public class JavaTestConfiguration {
public void setFoo(String foo) {
this.foo = foo;
}
@NotNull
String foo;
@Bean
String foo() {
return foo;
}
}
JavaTestConfigurationTest.java
package com.kerz;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.assertEquals;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {JavaTestConfiguration.class})
@TestPropertySource("classpath:test.properties")
public class JavaTestConfigurationTest {
@Autowired
String foo;
@Test
public void shouldWork() throws Exception {
assertEquals("foo", "bar", foo);
}
}
test.properties
foo=bar
答案 0 :(得分:0)
如果要启动Spring上下文,则测试是更多集成测试。因此,您还应测试生产弹簧配置。
我建议不要创建测试配置。使用一个生产配置进行测试。
您还使用@TestPropertySource
注释,当您需要定义测试特定属性时使用该注释。如果您可以使用PROD配置进行测试,请不要使用它。