1

@Mock 和 @InjectMock 是否为我的测试类中的每个测试创建一个新的模拟值?想知道这是如何工作的,如果它没有创建新的模拟值,我是否必须使用 reset ?

4

2 回答 2

2
@Mock is shorthand for Mockito.mock(Foo.class);

你用它来初始化一个模拟。

@InjectMocks is shorthand for MockitoAnnotations.initMocks(this) 

您可以使用它来设置使用您创建的所有模拟来初始化您的类!

示例测试设置

这将为您编写的每个测试(@Test)提供干净的设置。

public class FooTest {
    private Foo foo = new Foo();

    @Mock
    private Bar bar;

    @Before
    public void setup() {
        initMocks(this);
    }

    @Test
    public void testSetupOk() { // delete this test once it passes
        assertNotNull(foo);
        assertNotNull(bar); // this will fail if you remove @Mock
    }
}

您可以一起使用这些注释来正确设置被测类。

请注意,您仍然必须配置模拟以返回所需的行为!(请参阅API 文档中的 Mockito.when )。

于 2013-11-15T19:35:22.587 回答
1

根据MockitoJUnitRunner的文档

在每个测试方法之前初始化模拟。

于 2013-11-14T21:00:52.250 回答