Mockito 单元测试:工厂创建 newInstance

Mockito Unit test: Factory create newInstance

对于单元测试,我想测试好的和坏的场景

我有点卡在 Factory.createFoo() 方法上了。 我如何为此编写适当的单元测试(使用 Mockito)

public class Bar extends Foo {
    public Bar() {}
    public Bar(Scenario scenario){
       ...DoStuff..
    }
}

public static <T extends Foo> T createFoo(Class<T> fooClass) throws RuntimeException {
    try {
        return fooClass.newInstance();
    } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
        throw new RuntimeException("Could not create the Foo: " + fooClass.getSimpleName(), e);
    }
}

public static <T extends Foo> T createFoo(Scenario scenario, Class<T> fooClass) throws RuntimeException {
    try {
        return fooClass.getDeclaredConstructor(Scenario.class).newInstance(scenario);
    } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
        throw new RuntimeException("Could not create the needed Foo: " + fooClass.getSimpleName(), e);
    }
}

我希望能够模拟以下部分:

fooClass.newInstance();

fooClass.getDeclaredConstructor(Scenario.class).newInstance(scenario);

我找到了一些工厂示例,但都没有通用

Class<T>

使这些示例对我无效。

如何继续测试这些工厂方法? 如果存在导致无法测试的设计缺陷,请毫不犹豫地指出这些缺陷;-)

用真正的 classes 设置一个测试会导致抛出所需的异常,而不是模拟,这不是更容易吗?

示例:要获得 InstantiationException,您可以传入抽象 class(定义为测试中的嵌套 class)并获得 IllegalAccessException可以发送带有私有无参数构造函数的 class。然后测试 RuntimeException 是否被抛出。