我正在尝试进行集成测试,其中包括执行ApplicationRunner。
我使用@SpringBootTest,并且在初始化上下文后,会自动启动ApplicationRunner,这没关系。
我要实现的是在ApplicationRunner中注入一个模拟,并配置该模拟,然后再执行ApplicationRunner。
如果在测试中配置了模拟,那将不起作用,因为在执行测试时,Spring上下文已经被初始化并且ApplicationRunner已经被执行。
在Spring上下文已初始化之后以及在执行ApplicationRunner之前,是否可以配置模拟?
最佳答案
如果您的ApplicationRunner类具有Bean依赖关系,则可以如下进行模拟。
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationRunnerTest {
@MockBean
private final Dependency dependency;
@Autowired
private final ApplicationRunner applicationRunner;
@Before
public void setUp() throws Exception {
}
@Test
public void testMethod() {
}
}