mas*_*ick 12 java spring-test spring-bean spring-boot
在我的 Spring Boot 测试中,我使用了 2 个具有不同限定符的模拟 bean:
@RunWith(SpringRunner.class)
@SpringBootTest
class HohoTest {
@MockBean @Qualifier("haha") IHaha ahaha;
@MockBean @Qualifier("hoho") IHaha ohoho;
}
Run Code Online (Sandbox Code Playgroud)
由于我没有明确使用这些 bean,我宁愿将它们从类主体中移开,因为@MockBean注释现在是可重复的:
@RunWith(SpringRunner.class)
@SpringBootTest
@MockBean(IHaha.class)
@MockBean(IHaha.class)
class HohoTest {}
Run Code Online (Sandbox Code Playgroud)
但是,我还需要传入一个限定符,因为它们具有相同的类型。关于如何实现这一目标的任何想法?
Vla*_*liy 19
因为使用注释@Qualifier意味着通过名称选择 bean,所以您可以使用如下代码为模拟设置名称:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {JsonMapperConfig.class})
public class IntegrationFlowTest {
@MockBean(name = "s3MessageRepository")
private S3Repository s3MessageRepository;
// etc
Run Code Online (Sandbox Code Playgroud)
如果可以将模拟定义完全移出测试类,您还可以在单独的@Configuration类中创建模拟:
@Configuration
public class MockConfiguration
{
@Bean @Qualifier("haha")
public IHaha ahaha() {
return Mockito.mock(IHaha.class);
}
@Bean @Qualifier("hoho")
public IHaha ohoho() {
return Mockito.mock(IHaha.class);
}
}
Run Code Online (Sandbox Code Playgroud)
在类级别声明时@MockBean,目前不支持提供qualifier。
如果您想获得此类支持,我建议您在 Spring Boot 问题跟踪器中请求。
否则,您将需要继续@MockBean在 旁边的字段上声明@Qualifier。
| 归档时间: |
|
| 查看次数: |
9423 次 |
| 最近记录: |