43.3.5 模拟和监视bean
有时候需要在运行测试用例时mock一些组件,例如,你可能需要一些远程服务的门面,但在开发期间不可用。Mocking在模拟真实环境很难复现的失败情况时非常有用。
Spring Boot提供一个@MockBean
注解,可用于为ApplicationContext
中的bean定义一个Mockito mock,你可以使用该注解添加新beans,或替换已存在的bean定义。该注解可直接用于测试类,也可用于测试类的字段,或用于@Configuration
注解的类和字段。当用于字段时,创建mock的实例也会被注入。Mock bean每次调用完测试方法后会自动重置。
注 如果你的测试使用了Spring Boot的测试注解(比如@SpringBootTest
),这个特性会被自动启用。要换一种方式使用这个特性的话,需要明确地添加一个监听器。如下所示:
下面的示例使用mock实现替换存在的RemoteService
bean:
此外,你可以使用@SpyBean
,来用Mockitospy
包装任何已存在的bean。具体参考Javadoc。
注 Spring的测试框架会缓存测试之间应用上下文,并为共享相同配置的测试重用上下文。使用@MockBean
或者@SpyBean
会影响缓存键,很可能会增加上下文的数量。
最后更新于