[英]How do you mock external dependencies in spring boot application?
我需要测试一个SpringBoot应用程序,在该应用程序中针对终点(目前是本地)运行测试。
从服务到外部服务( s3
)有一个调用,我只需要对此进行模拟,这样我们就不会从测试中对s3
进行实时调用。
我使用Mockito进行嘲笑。
调用堆栈:
Controller -service
-external service.
从我的测试中,我只是点击了终点网址( localhost:8080/actions/domyjob
)
这是我的控制器:
@RestController
@RequestMapping("/myjob")
public class MyController{
@Autowired
private MyService myService;
@RequestMapping(path = "/doJobInMyService", method = POST)
public void doJobInMyService(){
myService.doMyJob()
}
}
这是我的服务:
@Service
public class MyService {
@Autowired
private s3Client AmazonS3Client;
doMyJob() {
s3Client.putObject(new PutObjectRequest());
}
}
如果您看到了,如果我想测试整个流程,请通过调用localhost:8080/myjob/doJobInMyService
并仅模拟s3Client.putObject(new PutObjectRequest())
,这样就不会对s3
进行外部调用。
试过这个,但我还是没有运气:
@ActiveProfiles("MyTestConfig")
@RunWith(SpringJUnit4ClassRunner.class)
public class MyTest extends BaseTest {
@Autowired
private AmazonS3Client amazonS3Client;
@Test
public void testMyResponse() {
try {
Mockito.when(amazonS3Client.putObject(anyObject())).thenReturn(new PutObjectResult());
assertNotNull(getMyClient().doMyJob());
} catch(Exception e) {
}
}
}
@Profile("MyTestConfig")
@Configuration
public class MyTestConfiguration {
@Bean
@Primary
public AmazonS3Client amazonS3Client() {
return Mockito.mock(AmazonS3Client.class);
}
从Spring Boot 1.4.x开始,通过注释@MockBean
本地支持Spring Bean的@MockBean
。 有关更多信息,请参见Spring Boot文档的本部分 。
我创建了有关该主题的博客文章 。 它还包含带有示例的Github存储库的链接。
诀窍是使用测试配置,在该配置中,您使用伪造的Spring Bean覆盖原始的Spring Bean(例如您的情况下为s3Client
)。 您可以将@Primary
和@Profile
批注用于此技巧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.