对于单元测试,我想测试好的和坏的场景
我有点卡在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
。