2016-05-03 3 views

答えて

3

はい、このようなものは、それを行います。

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を使用して他のオブジェクトにモックを挿入する方法を示しています。

+1

実際には、OPはおそらくサービスメソッドを呼び出すでしょう。 '@Mock'はテストで' EntityManager'フィールドに注釈を付けるために使用され、 '@InjectMocks'はテストで' ServiceClass'フィールドに注釈を付けるために使われます。このようにして、テストでは 'myServiceClass.doServiceAction()'のようなものが呼び出され、模擬された 'EntityManager'がそのコードの一部として呼び出されます。 – Chill

+0

合意しました。この古い質問は、さらに詳しく説明しています。http://stackoverflow.com/questions/15228777/how-does-mockito-injectmocks-work –

2

短い答えははいです。 EntityManagerはインタフェースであり、Mockitoと完全に "モックできます"。これは次のようなものです:

EntityManager mocked = mock(EntityManager.class); 
when(mocked.find(any(), any(), any(), any()).thenReturn(yourMockedValue) 
関連する問題