对于单元测试,我想测试好的和坏的场景
我在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>
让这些例子对我无效。
如何继续测试这些工厂方法? 如果有一个设计缺陷使这个不可测试,请不要犹豫,指出我的缺点; - )
答案 0 :(得分:0)
而不是嘲笑,用真实的类设置测试会不会更容易导致抛出所需的异常?
示例:要获得InstantiationException
,您可以传入一个抽象类(在测试中定义为嵌套类)并获得IllegalAccessException
,您可以在一个私有的类中发送 - args构造函数。然后测试是否抛出了RuntimeException
。