我已经读到,当使用@mock时,它应该与@runwith(mockitojunitrunner.class)一起使用,而对于@mockbean,它与@runwith(springrunner.class)一起使用。
但是,对于@mock,我发现mockitojunitrunner和springrunner都可以互换使用。我很困惑为什么springrunner也在这种情况下工作?
@RunWith(MockitoJUnitRunner.class) // also work when @RunWith(SpringRunner.class) is used
public class testService {
@InjectMocks
private ServiceA serviceA;
@Mock
private DependencyA dependencyA;
}
2条答案
按热度按时间0wi1tuuw1#
通常,如果您使用的是springboot,并且需要从springapplicationcontext模拟bean,那么您将使用springboot的@mockbean支持,而不是简单的@mock。
如果bean注入是通过autowired注解进行的,那么@mock将不起作用。
snvhrwxg2#
在谈到
@MockBean
该类包含在spring引导测试库中。它允许在spring应用程序上下文中添加mockito mock。基本上
@MockBean
是一个@Mock
和一个@InjectMocks
. 所以,您也可以将@mock与springrunner一起使用,但当然不推荐使用,因为它更重。一般来说,您会使用mockito进行轻量级单元测试,而
@MockBean
当您需要模拟的servlet环境时,比如在组件测试或混合集成测试中。@mock、@mockbean和mockito.mock()之间的区别