我正在使用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
答案 0 :(得分:2)
我认为您的问题出在@SpringBootTest
上,该问题将主应用程序上下文加载到主ConfigurationClass
中。因此,即使您没有使用Kafka,Spring也会尝试初始化缺少的{@ {1}}属性的kafka bean。
您可以使用spring.kafka.bootstrap-servers
通过指定一个单独的配置类来运行测试,而不使用kafka bean和其他不必要的bean
@ContextConfiguration