[Easy | Power] Макет: сделать constructor.newInstance (...) сгенерировать исключение? - PullRequest
3 голосов
/ 23 мая 2019

Я хочу, чтобы constructor.newInstance(...) выдал исключение в модульном тесте.Я хотел бы проверить, достигнута ли ветка else в следующем (фиктивном) коде:

public <T extends IInterface> instantiate(final Constructor<IInterface> constructor) {
    try {
        return constructor.newInstance(arg);
        } catch (Exception e) {
        return null;
    }
}

Я бы хотел достичь случая null.Могу ли я издеваться над без , используя (Power) Mockito?

Теоретически я мог бы сделать

class TestImplementation implements IInterface {
    public TestImplementation(Arg.class) {
        throw new InstantiationException("just for your test case");
    }
}

Но мне любопытно, смогу ли я достичь этого с помощью насмешек.

1 Ответ

1 голос
/ 23 мая 2019

Класс java.lang.Constructor является окончательным, поэтому по умолчанию дразнить сложно. Последние версии Mockito поддерживают насмешливые выпускные занятия, EasyMock не насколько мне известно.

Таким образом, ваш выбор, вероятно:

  • Mockito (последние версии, с включенным новым экспериментальным "mocking of final")
  • PowerMock (ITO)
  • JMockit

И для справки: передача экземпляра Class некоторого "фиктивного" класса, как вы предполагаете в этом вопросе, на намного лучше , чем при использовании насмешливого фреймворка.

Вы должны понимать: вы не используете насмешки, потому что вы можете . Вы используете его, только когда у вас есть ! В вашем случае, есть простое, прямое решение для бездействия для проверки вашего производственного кода.

Итак: используйте TestImplementation.class и забудьте об использовании насмешливого фреймворка здесь.

...