Следующее, работающее под Mockito 1.9.0 и JUnit 4.8.2, не выводит что-либо на мою консоль:
import static org.mockito.Mockito.*;
import org.junit.Test;
public class TestNonCall {
public class TestClass {
public String test() {
System.out.println("test called!");
return "test";
}
}
@Test
public void doTest() {
final TestClass mock = mock(TestClass.class);
when(mock.test()).thenReturn("mock!");
}
}
Далее, если я добавлю точку останова в метод test (), она никогда не будет достигнута.
Возможно, опубликуйте больше кода? Похоже, ваш пример не достаточно сложен, чтобы продемонстрировать поведение, с которым у вас проблемы.
Также: используете ли вы последнюю версию Mockito?
Редактировать: Новая мысль: вы издеваетесь над финальным методом?
Если вы добавите модификатор final
к методу, над которым вы издеваетесь, вы получите поведение, о котором вы сообщили.
Это потому, что Mockito не высмеивает финальные и статические методы. Вместо этого он делегирует вызовы реальной реализации.
Может ли ваш реальный код пытаться смоделировать последний метод?
Если это так, вы можете использовать PowerMock , который является расширением Mockito, позволяющим высмеивать финальные методы.
Вам понадобится добавить следующие аннотации к вашему классу тестовых примеров:
@RunWith(PowerMockRunner.class)
@PrepareForTest(TestClass.class)
public class TestNonCall {
// ...
}
и смоделируйте класс с помощью метода PowerMock в своем методе тестирования:
final TestClass mock = PowerMockito.mock(TestClass.class);
затем продолжайте как обычно.