我正在尝试进行集成测试,其中包括执行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() {
    }
}

10-05 18:59