[Easy | Power]模拟:让Constructor.newInstance(...)抛出异常?

时间:2019-05-23 07:25:54

标签: java exception junit constructor mocking

我想让constructor.newInstance(...)在单元测试中引发异常。我想检查以下(dummy-)代码是否达到else-branch:

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 个答案:

答案 0 :(得分:1)

java.lang.Constructor是最终的,因此默认情况下很难进行模拟。 Mockito的最新版本支持模拟最后的类,据我所知EasyEock不。

因此,您的选择可能是:

  • Mockito(最新版本,启用了新的实验性的“最终模拟”)
  • PowerMock(ito)
  • JMockit

记录在案:传递一些“虚拟”类的Class实例,就像您在问题中所暗示的那样,比使用模拟框架要好

您必须了解:您不使用嘲笑,因为您可以。您只有在拥有后才能使用它!在您的情况下,有一个简单,直接的非模拟解决方案可以测试您的生产代码。

所以:请使用TestImplementation.class并在这里忘记使用模拟框架。