EntityManagerをmockする方法は?
-
28-09-2019 - |
質問
テストサービスレイヤー(私の場合はセッションファサード)を作成して、基礎となるレイヤー(私の場合はエンティティマネージャーです)に依存しないようにするために、エンティティマネージャーを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で迅速に実行して実行できます。