@Mock和@InjectMocks之间的区别

问题

Mockito框架有什么区别?@Mock@InjectMocks


#1 热门回答(285 赞)

@Mock创建一个mock.@InjectMocks,创建该类的实例,并将使用@Mock(或@Spy)注释创建的模拟注入此实例。请注意,你必须使用566585419或Mockito.initMocks(this)初始化这些模拟并注入它们。

@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {

    @InjectMocks
    private SomeManager someManager;

    @Mock
    private SomeDependency someDependency; // this will be injected into someManager

     //tests...

}

#2 热门回答(52 赞)

在你的测试类中,测试类应使用@InjectMocks进行注释。这告诉Mockito哪个类注入模拟:

@InjectMocks
private SomeManager someManager;

从那时起,我们可以指定类中的哪些特定方法或对象,在本例中为SomeManager,将替换为模拟:

@Mock
private SomeDependency someDependency;

在此示例中,将模拟SomeManager类中的SomeDependency。


#3 热门回答(44 赞)

@Mockannotation嘲笑有关对象。

@InjectMocksannotation允许向底层对象注入@Mock创建的不同(和相关)模拟。
两者都是互补的。