java - Spring 启动: Inject mock in ApplicationRunner

标签 java spring spring-boot junit4 junit5

我正在尝试进行集成测试,其中包括 ApplicationRunner 的执行。

我使用@SpringBootTest,当上下文初始化时,ApplicationRunner会自动启动,这是可以的。

我想要实现的是在 ApplicationRunner 中注入(inject)一个模拟并在执行 ApplicationRunner 之前配置该模拟。

如果我在测试中配置mock是行不通的,因为当执行测试时,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() {
    }
}

关于java - Spring 启动: Inject mock in ApplicationRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61979773/

相关文章:

java - 属性引用异常 : No property ids found for type

java - Azure - 启动命令 - 无法访问 jarfile app.jar

java - spring.config.additional-location 不适用于绝对/相对父目录

java - Spring Boot Maven 不会构建可执行 Jar,因为它发现重复项

Eclipse 中的 Java/C++ 项目管理?

java - 为什么要在classpath后面写 "*"

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - 试图实现选择排序但它不会工作

java - Spring MVC 测试结果出现 415 错误

java - spring-boot redis : How to invalidate all sessions of a user?