web-dev-qa-db-ja.com

JUnitおよびJavaでスタブを使用する方法

私はJUnitとMocksを使用しましたが、JUnitのMocksとStubsの違いと、JavaのJUnitでStubsを使用する方法は何ですか?そして、EasyMock、Mockitoなどを備えたMocksとして、StubsはJavaで何を使用しますか?

Javaのスタブのサンプルコードをいくつか教えてください。

11
Hamid

Junitでスタブを使用するには、フレームワークは必要ありません。

何らかのインターフェイスをスタブ化する場合は、それを実装するだけです。

interface Service {
    String doSomething();
}

class ServiceStub implements Service {
    public String doSomething(){
        return "my stubbed return";
    }
}

次に、新しいスタブオブジェクトを作成し、テストされたオブジェクトに挿入します。

具象クラスをスタブ化する場合は、サブクラスを作成し、スタブ化されたメソッドをオーバーライドします。

class Service {
    public String doSomething(){
        // interact with external service
        // make some heavy computation
        return "real result";
    }
}

class ServiceStub extends Service {
    @Override
    public String doSomething(){
        return "stubbed result";
    }
}
18
Sergey Lagutin

私の意見では、フレームワークやテクノロジーは関係ありません。モックとスタブは次のように定義できます。

スタブは、システム内の既存の依存関係(または共同作業者)の制御可能な置換です。スタブを使用すると、依存関係を直接処理せずにコードをテストできます。

モックオブジェクトは、ユニットテストが成功したか失敗したかを決定するシステム内の偽のオブジェクトです。これは、テスト中のオブジェクトが期待どおりに偽のオブジェクトと相互作用したかどうかを検証することにより行います。

おそらく、これらの画像はスタブとモックの間の相互作用を明確にすることができます。

スタブStub

モックMock

24
Michael Baker