如何模拟对象构造?

Gru*_*eck 6 java tdd junit mocking

有没有办法在Java中使用JMock模拟对象构造?

例如,如果我有这样的方法:

public Object createObject(String objectType) {
    if(objectType.equals("Integer") {
        return new Integer();
    } else if (objectType.equals("String") {
        return new String();
    }
}
Run Code Online (Sandbox Code Playgroud)

...有没有办法模拟测试方法中对象构造的期望?

我希望能够对某些构造函数被调用的期望,而不是额外的代码来检查类型(因为它不会像我的例子那样复杂和简单).

所以代替:

assertTrue(a.createObject() instanceof Integer);
Run Code Online (Sandbox Code Playgroud)

我可以期待某个构造函数被调用.只是为了使它更清洁,并以更易读的方式表达实际测试的内容.

请原谅这个简单的例子,我正在处理的实际问题有点复杂,但是期望会简化它.


更多背景:

我有一个简单的工厂方法,它创建包装器对象.被包装的对象可能需要在测试类中难以获得的参数(它是预先存在的代码),因此很难构造它们.

也许接近我实际想要的是:有没有办法一次性模拟整个类(使用CGLib),而没有指定每个方法来存根?

所以mock被包装在一个构造函数中,所以很明显可以在它上面调用方法,JMock是否能够动态模拟每个方法?

我的猜测是否定的,因为那会非常复杂.但是知道我正在咆哮错误的树也很有价值:-)

sbl*_*ndy 6

我唯一能想到的是在工厂对象上创建create方法,而不是模拟.

但是在模拟构造函数调用方面,没有.模拟对象预先假定对象的存在,而构造函数预先假定对象不存在.至少在java中,分配和初始化一起发生.