java如何模拟@InjectMocks类中的方法?
我正在SpringMVC上使用Mockito进行JUnit测试。测试使用@InjectMock和@Mock with when(方法(…)。然后返回(X)。问题是如何在@Inject实例中@Mock方法
我尝试创建了两个实例,例如 @注射模拟 Foo fooInstance和@Mock Foo fooInstanceMock; 我的想法是区分要注入的实例和要模拟的实例。 我还尝试将Spy与InjectMock一起使用,但它返回一个异常
实际类语法-
class Foo {
public X(..) {
...
Y(...); // method call to Y
...
}
public Y(..) {
...
}
}
测试语法-
public class FooTest {
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@InjectMocks
Foo fooInstance;
@Mock
Foo fooInstanceMock;
@Test
public void xTest{
when(fooInstanceMock.Y(..)).thenReturn(true);
Boolean result = fooInstance.X(25);
Assert.assertTrue(result == true)
}
}
我希望输出为true,然后返回true,但因为它认为这是一个injectMock,所以它进入了实现
# 1 楼答案
@InjectMocks
用于将测试中定义的模拟注入到具有此注释的非模拟实例中在您的用例中,看起来您正在尝试做一些不同的事情-您希望通过
x
的实际实现来真正实现Foo
,但要模仿y
的实现,它x
调用。这可以通过部分模拟或用Mockito的术语来说,间谍来实现: