Mockito 单元测试:工厂创建新实例



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

我有点卡在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>

使这些示例对我来说无效。

如何继续测试这些工厂方法? 如果存在设计缺陷使其无法测试,请不要犹豫,向我指出这些缺陷;-)

与其嘲笑,不如用真实的类设置一个测试,这将导致抛出所需的异常,这不是更容易吗?

示例:要获取InstantiationException您可以传入一个抽象类(定义为测试中的嵌套类),并且要获取一个IllegalAccessException您可以使用私有的 no-args 构造函数发送一个类。然后测试是否扔了RuntimeException

相关内容

  • 没有找到相关文章

最新更新