2015-03-24 69 views
0

The method described in this answer最適合我實例化我的模擬對象。如何在Spring中實例化模擬對象時設置Mockito'when'方法?

<bean id="dao" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="com.package.Dao" /> 
</bean> 

然而,我還需要設置的Mockito when方法(一個或多個)。

我能做到的是,在XML,或者說是它的唯一的方式,如:

when(objectToBestTested.getMockedObject() 
    .someMethod(anyInt()) 
    ).thenReturn("helloWorld"); 

我的測試用例中?

我問的原因是因爲我不需要吸氣劑MockedObject,我只是添加一個吸氣劑,所以我可以測試ObjectToBeTested

回答

4

這是我如何使用Mockito和Spring的方式。

讓我們假設我有一個控制器使用一個服務,這個服務注入自己的DAO,基本上有這個代碼結構。下面

@Controller 
public class MyController{ 
    @Autowired 
    MyService service; 
} 

@Service 
public class MyService{ 
    @Autowired 
    MyRepo myRepo; 

    public MyReturnObject myMethod(Arg1 arg){ 
    myRepo.getData(arg); 
    } 
} 

@Repository 
public class MyRepo{} 

代碼是JUnit測試用例

@RunWith(MockitoJUnitRunner.class) 
public class MyServiceTest{ 

    @InjectMocks 
    private MyService myService; 

    @Mock 
    private MyRepo myRepo; 

    @Test 
    public void testMyMethod(){ 
     Mockito.when(myRepo.getData(Mockito.anyObject()).thenReturn(new MyReturnObject()); 
     myService.myMethod(new Arg1()); 
    } 
} 

如果使用獨立應用程序考慮模擬如下。

@RunWith(MockitoJUnitRunner.class) 
public class PriceChangeRequestThreadFactoryTest { 

@Mock 
private ApplicationContext context; 

@SuppressWarnings("unchecked") 
@Test 
public void testGetPriceChangeRequestThread() { 
    final MyClass myClass = Mockito.mock(MyClass.class); 
    Mockito.when(myClass.myMethod()).thenReturn(new ReturnValue()); 
    Mockito.when(context.getBean(Matchers.anyString(), Matchers.any(Class.class))).thenReturn(myClass); 

    } 
} 

我真的不喜歡在應用程序的上下文中創建模擬bean,但如果你確實使它只適用於你的單元測試。

+0

乾杯,謝謝你的回答。你介意看看其他一些相關的問題:單元測試和春天嗎? 特別是這一個:http://stackoverflow.com/questions/29203218/instantiating-objects-when-using-spring-for-testing-vs-production – dwjohnston 2015-03-25 03:04:19

+0

我已經添加我的答案在另一個問題,謝謝=) – Koitoer 2015-03-25 23:27:52

相關問題