Предполагая, что код в вашем примере на самом деле является кодом Java, а заглавная буква была добавлена при копировании в Microsoft Word (или другой текстовый процессор), попробуйте следующее:
public void testSpy()
{
MainClass spyMain = spy(obj);
doReturn("Blammy").when(spyMain).getMethod2();
obj.method1();
}
Вот еще некоторая информация:
- Тестовый класс должен находиться в том же пакете, что и MainClass.Например:
Местоположение MainClass: src / main / java / blammy / MainClass.java
Местоположение TestClass: src / test / java / blammy / TestClass.java - Вариант
doReturn
mocking не вызывает обернутый метод, но вариант thenReturn
делает. - Это неправильно:
@InjectMocks
MainClass obj = new MainClass();
Используйте аннотацию @InjectMocks
только есливы звоните MockitoAnnotations.initMocks(class)
.
Вот ваш тестовый класс, переписанный для использования @InjectMocks
@RunWith(MockitoJunitRunner.class)
public class Testclass
{
@InjectMocks
private MainClass classToTest;
@Before
public void beforeTest()
{
MockitoAnnotations.initMocks(this)
}
@Test
public void testSpy()
{
spyClassToTest = spy(classToTest);
doReturn("Testing spy").when(spyClassToTest ).getMethod2();
spyClassToTest.method1();
}
}
Дополнительные примечания:
Возможно, вы сможете использовать @Spy
и @InjectMocks
на одном и том же объекте (в моем примере на classToTest), но я никогда этого не делаю.