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