Следующее, работающее под 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);
затем продолжайте как обычно.
person
Tom Tresansky
schedule
09.03.2012
when(mock.test)
не компилируется, что заставляет меня подозревать остальных. Пожалуйста, проверьте еще раз, что это действительно то, о чем говорит ваш код. - person skaffman   schedule 09.03.2012