テストサービスレイヤー(私の場合はセッションファサード)を基盤となるレイヤー(私の場合はエンティティマネージャー)から独立させるために、エンティティマネージャーをモックする必要があります。
では、どうすればこれを達成できますか?dbunitを使用する必要がありますか?easy / j(Mock)が必要ですか?
テストサービスレイヤー(私の場合はセッションファサード)を基盤となるレイヤー(私の場合はエンティティマネージャー)から独立させるために、エンティティマネージャーをモックする必要があります。
では、どうすればこれを達成できますか?dbunitを使用する必要がありますか?easy / j(Mock)が必要ですか?
非常に使いやすく、理解しやすいMockitoFrameworkを使用することをお勧めします。
@Mock
private EntityManager entityManager;
entityManagerに属するメソッドを使用する場合は、を呼び出す必要があります。
Mockito.when(METHOD_EXPECTED_TO_BE_CALLED).thenReturn(AnyObjectoftheReturnType);
テストを実行すると、Mockito.when for EntityManagerで以前に宣言された呼び出しは、宣言に入れられた値を返します。
ここで完全なドキュメントをお読みください。
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();
}
}
(注:私はここに書いたので、コンパイルできないかもしれませんが、あなたにアイデアを与えるでしょう)。
私は通常、テストケースで具体的なサービスの実装をモックするためにEasyMockを使用しています。彼らのユーザーガイドをチェックしてください。これには、非常にわかりやすいステップバイステップガイドが含まれています。このガイドでは、一般的なモックフレームワークの背後にある基本的な概念を説明し、EasyMockをすばやく起動して実行できます。