小编Rez*_*our的帖子

在 Spring Boot 集成测试中模拟外部依赖项

主要问题:有没有办法在 Spring 的整个上下文中用模拟对象替换 bean,并将确切的 bean 注入到测试中以验证​​方法调用?

我有一个 Spring Boot 应用程序,我正在尝试编写一些集成测试,其中我使用MockMvc.

Testcontainer使用和针对实际数据库和 AWS 资源运行集成测试Localstack。但为了测试作为外部依赖项集成的 API Keycloak,我决定模拟KeycloakService并验证是否将正确的参数传递给此类的正确函数。

我的所有集成测试类都是名为的抽象类的子类AbstractSpringIntegrationTest

@Transactional
@Testcontainers
@ActiveProfiles("it")
@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@ContextConfiguration(initializers = PostgresITConfig.DockerPostgreDataSourceInitializer.class, classes = {AwsITConfig.class})
public class AbstractSpringIntegrationTest {

    @Autowired
    public MockMvc mockMvc;
    @Autowired
    public AmazonSQSAsync amazonSQS;
}
Run Code Online (Sandbox Code Playgroud)

考虑有一个类似以下类的子类:

class UserIntegrationTest extends AbstractSpringIntegrationTest {
    
    private static final String USERS_BASE_URL = "/users";

    @Autowired
    private UserRepository userRepository;

    @MockBean
    private KeycloakService keycloakService;

    @ParameterizedTest
    @ValueSource(booleans = {true, false})
    void …
Run Code Online (Sandbox Code Playgroud)

java spring spring-test mockito spring-boot

6
推荐指数
1
解决办法
1785
查看次数

标签 统计

java ×1

mockito ×1

spring ×1

spring-boot ×1

spring-test ×1