Что-то говорит мне, что я делаю что-то не так ... это не должно быть так сложно.
У меня есть класс, который опирается на какой-то внутренний класс.Я создаю это внутреннее пространство с помощью защищенного метода, чтобы я мог переопределить его в тесте, чтобы обеспечить имитацию.Я понимаю, что для получения ложного объекта Mockito, генерирующего исключение из метода void, я должен использовать doThrow.
Но моя проблема в том, что компилятор жалуется, что вызов Mockito.doThrow () вызывает исключение RuntimeException ... так что тогда я должен добавить предложение throws в метод, устанавливающий макет.Это ошибка в самом Mockito?doThrow объявляет что-то, что должно произойти в будущем, но не во время установки макета.
Мой OuterClass выглядит как ...
public class OuterClass {
protected InnerClass inner;
protected void createInner() { inner = new InnerClass(); }
protected doSomething() {
try {
inner.go();
} catch (RuntimeException re) {
throw new MyException("computer has caught fire");
}
}
}
И мой тестовый код выглядит как ....
@Test(expected = MyException.class)
public void testSomething() {
OuterClass outer = new TestOuterClass();
outer.doSomething();
}
public static class TestOuterClass extends OuterClass {
@Override
public void createInner() {
InnerClass mock = Mockito.mock(InnerClass.mock);
Mockito.doThrow(new RuntimeException("test")).when(mock).go(); // PROBLEM
inner = mock;
}
}