質問

テストサービスレイヤー(私の場合はセッションファサード)を作成して、基礎となるレイヤー(私の場合はエンティティマネージャーです)に依存しないようにするために、エンティティマネージャーをock笑する必要があります。

では、どうやってこれを達成できるのでしょうか? dbunitを使用する必要がありますか? Easy/J(Mock)が必要ですか?

役に立ちましたか?

解決

Mockitoフレームワークを使用することをお勧めします。これは非常に使いやすく理解できます。

@Mock
private EntityManager entityManager; 

EntityManagerに属する方法を使用する場合は、電話する必要があります。

Mockito.when(METHOD_EXPECTED_TO_BE_CALLED).thenReturn(AnyObjectoftheReturnType);

テストを実行すると、Mockitoで以前のコールが宣言されています。エンティティマネージャーの場合は、宣言に入れられた値を返します。

ここで完全なドキュメントを読んでください。

https://static.javadoc.io/org.mockito/mockito-core/2.12.0/org/mockito/mockito.html#stubbing

他のヒント

モッキングには、お勧めします PowerMock. 。自動生成されたプロキシのおかげで、インターフェイスからモックを作成することから始めて、静的初期化を抑制することで初期化が終了することを介して、想像できる事実上すべてを行うことができます(私を打ち負かす唯一のものは、モッキングをいじっていました。 java.lang.Object).

と言ってみましょう SessionFacadeTest あなたのJunitテストスイートは次のとおりです SeesionFacade.

import static org.powermock.api.easymock.PowerMock.createMock;
import static org.powermock.api.easymock.PowerMock.replayAll;
import static org.powermock.api.easymock.PowerMock.verifyAll;
import static org.easymock.EasyMock.anyObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import javax.persistence.EntityManager;

@RunWith(PowerMockRunner.class)
@PrepareForTest({SessionFacade.class})
public class SessionFacadeTest {
    @Test public void persistingObject() {
        //set up stage
        SessionFacade fixture = new SessionFacade();
        EntityManager managerMock = createMock(EntityManager.class);
        fixture.setManager(managerMock);
        //record expected behavior
        managerMock.persist(anyObject());
        //testing stage
        replayAll();
        fixture.anyMethodThatCallPersist();
        //asserting stage
        verifyAll();
    }
}

(注:ここに書いたので、コンパイルしないかもしれませんが、アイデアを与えます)。

私は通常、テストケースでコンクリートサービスの実装をock笑するためにEasyMockを使用しています。彼らをチェックしてください ユーザーガイド. 。 AAは非常に簡単に段階的なガイドに従うことができます。これには、一般的なモッキングフレームワークの背後にある基本的な概念を説明し、EasyMockで迅速に実行して実行できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top