0

次のように初期化されたプライベートクラス変数を持つクラスがあります

public class MyClass{

    private BusinessObject businessObject = BusinessObjectGenerator.getBusinessObject();

    public MyClass(){

    }

    public Object myMethodToTest(){
    return businessObject.getObject();
    }
}

myMethodToTest今、代わりにモックオブジェクトを送信したい単体テストを試みていますbusinessObject。私はモックに mockito を使用spy(new MyClass())し、部分的なモックに使用しますが、 get への呼び出しをモックするのに問題がありますbusinessObject。1. businessObject への呼び出しをモックすることは可能ですか? もしそうなら、どのように?2. 単体テストを作成する際に役立つように、このコードをリファクタリングするにはどうすればよいですか。これを指し示すリソースは非常に役立ちます。

ありがとう!

4

1 に答える 1

4

このコードを適切にリファクタリングするには、次のようにします。

private BusinessObject businessObject;

public void setBusinessObject(BusinessObject instance) {
    businessObject = instance;
}

private BusinessObject getBusinessObject() {
    if (businessObject == null) {
        // represents existing implementation in original code sample
        businessObject = BusinessObjectGenerator.getBusinessObject();
    }
    return businessObject;
}

/* rest of your code */

これで、テスト サイトでクラスにモックを自分で挿入できます。

Guiceのようなフレームワークで依存性注入を使用してこれを行うことをお勧めします。それはあなたの時間の価値があります。

于 2012-11-30T04:10:52.110 に答える