主要问题:有没有办法在 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)