【发布时间】:2010-09-10 15:45:11
【问题描述】:
有没有办法在 Java 中使用 JMock 来模拟对象构造?
例如,如果我有这样的方法:
public Object createObject(String objectType) {
if(objectType.equals("Integer") {
return new Integer();
} else if (objectType.equals("String") {
return new String();
}
}
...有没有办法在测试方法中模拟对象构造的期望?
我希望能够期望调用某些构造函数,而不是使用额外的代码来检查类型(因为它并不总是像我的示例那样复杂和简单)。
所以而不是:
assertTrue(a.createObject() instanceof Integer);
我可能期望调用某个构造函数。只是为了让它更简洁一些,并以更易读的方式表达实际测试的内容。
请原谅这个简单的例子,我正在处理的实际问题有点复杂,但是有期望会简化它。
更多背景知识:
我有一个简单的工厂方法,它创建包装对象。被包装的对象可能需要在测试类中难以获得的参数(它是预先存在的代码),因此很难构造它们。
也许更接近我真正想要的是:有没有一种方法可以一举模拟整个类(使用 CGLib),而不指定每个方法来存根?
所以模拟被包装在一个构造函数中,所以显然可以在其上调用方法,JMock 是否能够动态模拟出每个方法?
我的猜测是否定的,因为那会非常复杂。但是知道我在叫错树也很有价值:-)
【问题讨论】:
-
您的工厂可以为它可能构建的每种类型(整数工厂、字符串工厂等)拥有自己的工厂,但是,您是对的,这会变得过于复杂。你断言 instanceof test 可能是最好的方法。