Spring Boot测试未使用测试属性

时间:2018-06-19 12:59:03

标签: spring spring-boot testing junit apache-kafka

我正在使用spring boot 2.0.1,但是当我执行测试时,它似乎开始于测试类之前,也就是主类。 在我的主课中,我使用spring cloud config,发现服务和kafka。 我有这个测试班:

@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource(locations = "classpath:bootstrap-test.properties")
@ActiveProfiles("test")
public class DaemonLogServiceTest {

@Autowired
private LogService logService;

@Before
public void setUp() {
    ResultLog log = new ResultLog();
    log.setNumberOfRowsProcessed(10);
    log.setLastCodOperProcessed(1000);
    log.setStatus(Status.SUCCESS.name());
}

@Test
public void whenOperationsProcessedThenLog() {
    logService.newActivity(10, 1000L, Status.SUCCESS);
    ResultLog log = logService.saveActivity();
    Assert.assertNotNull(log);
}

}

当我运行它时,似乎启动了使用Kafka和Spring云发现的Main方法(不是来自测试)。 输出如下:

018-06-19 14:45:01.397 ERROR 17124 --- [           main] o.s.boot.SpringApplication               : Application run failed
java.lang.IllegalStateException: Failed to load ApplicationContext

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at []
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.kafka.bootstrap-servers' in value "${spring.kafka.bootstrap-servers}"

我仅在主应用程序中使用Kafka,而不在测试类中使用。 我的财产文件是:

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
spring.datasource.schema=classpath:schema.sql
daemon.delay=2000
spring.cloud.discovery.enabled = false
spring.cloud.config.discovery.enabled = false
spring.cloud.config.enabled = false
eureka.client.enabled=false
spring.profiles.active=test

1 个答案:

答案 0 :(得分:2)

我认为您的问题出在@SpringBootTest上,该问题将主应用程序上下文加载到主ConfigurationClass中。因此,即使您没有使用Kafka,Spring也会尝试初始化缺少的{@ {1}}属性的kafka bean。

您可以使用spring.kafka.bootstrap-servers通过指定一个单独的配置类来运行测试,而不使用kafka bean和其他不必要的bean

@ContextConfiguration