私は次のようなコードを書いています。Mockitoを使用してEntityManagerのfindメソッドを擬似しますか?
entityManager.find(SomeClass.class、Long id、OtherClass.class、Session session);
Mockitoを使って模擬して希望の値を返すことはできますか?
おかげ
私は次のようなコードを書いています。Mockitoを使用してEntityManagerのfindメソッドを擬似しますか?
entityManager.find(SomeClass.class、Long id、OtherClass.class、Session session);
Mockitoを使って模擬して希望の値を返すことはできますか?
おかげ
はい、このようなものは、それを行います。
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
import org.junit.Test;
....
@Test
public void yourMockTest(){
// create your Mock
EntityManager entityManager = mock(EntityManager.class);
// instantiate your args
Class clazz = SomeClass.class;
Long id = 1000L;
Class otherClazz = OtherClass.class
Session session = new SessionImpl();
// instantate return object
SomeClass returnMe = new SomeClass();
// mock
when(entityManager.find(any(), any(), any(), any()).thenReturn(returnMe);
// execute
Object returned = entityManager.find(clazz, id, otherClazz, session);
// assert
assertEquals(returnMe, returned);
}
編集:chill
あなたはおそらく他のいくつかのクラスにEntityManager
に対処することがあります良い点になります。 This old questionは、Mockitoを使用して他のオブジェクトにモックを挿入する方法を示しています。
短い答えははいです。 EntityManagerはインタフェースであり、Mockitoと完全に "モックできます"。これは次のようなものです:
EntityManager mocked = mock(EntityManager.class);
when(mocked.find(any(), any(), any(), any()).thenReturn(yourMockedValue)
実際には、OPはおそらくサービスメソッドを呼び出すでしょう。 '@Mock'はテストで' EntityManager'フィールドに注釈を付けるために使用され、 '@InjectMocks'はテストで' ServiceClass'フィールドに注釈を付けるために使われます。このようにして、テストでは 'myServiceClass.doServiceAction()'のようなものが呼び出され、模擬された 'EntityManager'がそのコードの一部として呼び出されます。 – Chill
合意しました。この古い質問は、さらに詳しく説明しています。http://stackoverflow.com/questions/15228777/how-does-mockito-injectmocks-work –