Бросать исключения из Mockito издеваться - PullRequest
3 голосов
/ 15 апреля 2011

Что-то говорит мне, что я делаю что-то не так ... это не должно быть так сложно.

У меня есть класс, который опирается на какой-то внутренний класс.Я создаю это внутреннее пространство с помощью защищенного метода, чтобы я мог переопределить его в тесте, чтобы обеспечить имитацию.Я понимаю, что для получения ложного объекта 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;
  }
}

1 Ответ

1 голос
/ 15 апреля 2011

Пожалуйста, не могли бы вы проверить, действительно ли компилятор жалуется на RuntimeException?

Что касается RuntimeException, это то, что это не должно иметь значения во время компиляции.Я подозреваю, что компилятор на самом деле жалуется на MyException - я предполагаю, что это проверенное исключение, замеченное компилятором, которое выдается методом doSomething().Вы должны иметь возможность просто добавить throws MyException к методу теста, который затем будет перехвачен организатором теста.Так как ожидается, тестовый участник пройдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...