Я пытаюсь протестировать некоторый унаследованный код с помощью Mockito, и метод является типом void.Использовать методы Mockito to Stub в том же классе, что и тестируемый класс (CUT)
Я пропустил много вызовов методам в других классах, это прекрасно работает. Тем не менее, мне также нужно уметь вызывать определенные вызовы другим методам внутри одного класса.
В настоящее время это изделие не работает.
например. Мой класс, как показано ниже:
public class Test {
public Test(dummy dummy) {
}
public void checkTask(Task task, List <String> dependencyOnLastSuccessList) throws TaskException {
callToOtherClass.method1 // This works fine, I can stub it using mockito
updateAndReschedule(Long id, String message) // call to method in same class, I cannot stub it
}
public void updateAndReschedule(Long id, String message) {
//method logic.....
}
}
Это мой TestClass показывает, что я имею в минуту:
@Test
public void testMyMethod() {
Test testRef = new Test(taskJob);
Test spy = spy (testRef);
// when a particular method is called, return a specific object
when(callToOtherClass.method1).thenReturn(ObjectABC);
//doNothing when my local method is called
doNothing().when(spy).updateAndReschedule(1, "test");
//make method call
spy.checkTask(ts, taskDependencies);
}
Brilliant , благодаря. Он работает нормально. Чтобы проверить тест, мне нужно проверить, что метод был вызван, как бы я это сделал, поскольку я не создавал его как класс mockito? – Sudhir
Теперь причуды могут начаться! :) У вас могут быть свои причины, но в большинстве случаев не рекомендуется тестировать интерна вашего класса. Цель теста должна состоять в том, чтобы проверить взаимодействие класса со своей внешностью. Глубоко углубляясь в проверку внутренней структуры, вы получаете тест, который делает рефакторинг более сложным. Но чтобы ответить на ваш вопрос: просто установите переменную в определенное значение из метода overriddden и утвердите для этого. В этом случае переменная должна быть окончательной, поэтому simlpe boolean не будет делать. – fatih
Спасибо, да, это устаревший код, поэтому я не могу его полностью переусердствовать. Как получить значение из метода. Я попытался использовать метод getter, но все еще не смог его увидеть, когда попытался выполнить утверждение, например. private Boolean methodCalled = false; \t public void updateAndReschedule (Long id, String message) { \t \t methodCalled = true; \t} \t \t общественного логический wasMethodCalled() { \t возвращение methodCalled; \t} – Sudhir