2011-10-04 35 views
7

私はこのボードで同様の質問をしましたが、私の質問には答えられません。これは奇妙なことですが、あなたが嘲笑しているオブジェクトに対してコンストラクタ呼び出しを模擬することは可能です。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を使用するようにCustomerコンストラクタ呼び出しを変更できますが、それが役立つかどうかはわかりません。私はnew Customer(145)コンストラクタの本体が何をしているかを制御できません。

これは可能ですか?

+0

コンストラクタでデータベース接続を行わないことをお勧めします。それらを使用してクラスに接続を注入します。 –

+0

合意。しかし、私は顧客のコンストラクタロジックを制御できません。 – Setzer

答えて

11

これは、モック作成コンストラクタをサポートしていないため、easymockでは実行できません。 powermockと呼ばれるライブラリがあります。これは、私が知る限り、Javaのコンストラクタと静的メソッドをスタブすることができる唯一の模擬ライブラリです。

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

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

EasyMock 3.0以上で実行できます。

Customer cust = createMockBuilder(Customer.class) 
    .withConstructor(int.class) 
    .withArgs(145) 
    .addMockedMethod("someMethod") 
    .createMock(); 
関連する問題