EasyMock:在java中构造一个构造函数调用

问题描述:

我看了一下这个主板上的类似问题,但没有人回答我的问题。这听起来很奇怪,但是可以在你嘲笑的对象上模拟一个构造函数调用。EasyMock:在java中构造一个构造函数调用

例子:

class RealGuy { 

    .... 
    public void someMethod(Customer customer) { 
    Customer customer = new Customer(145); 
    } 
} 
class MyUnitTest() { 
    public Customer customerMock = createMock(Customer.class) 
    public void test1() { 
    //i can inject the mock object, but it's still calling the constuctor 
    realGuyobj.someMethod(customerMock); 
    //the constructor call for constructor makes database connections, and such. 
    } 
} 

我怎么能指望一个构造函数调用?我可以改变客户构造函数调用使用newInstance,但我不知道这是否会有所帮助。我无法控制new Customer(145)构造函数的内容。

这可能吗?

+0

在构造函数中不建立数据库连接是个好主意。使用它们将连接注入到类中。 –

+0

同意。但是我没有控制这个Customer构造函数的逻辑。 – Setzer

你不能用easymock做到这一点,因为它不支持模仿构造函数。有一个叫powermock的库可以做到这一点,它是唯一的模拟库,据我所知,它可以在Java中存储构造函数和静态方法。

import static org.powermock.api.easymock.PowerMock.expectNew; 

instance = new UsesNewToInstantiateClass(); 
expectNew(AnyOldClass.class).andReturn(anyClass); 

你可以这样做上面的EasyMock 3.0。

Customer cust = createMockBuilder(Customer.class) 
    .withConstructor(int.class) 
    .withArgs(145) 
    .addMockedMethod("someMethod") 
    .createMock();