如何模擬一個方法,該方法返回一個被施放的模擬對象。如何模擬一個返回一個模擬對象的方法
我有一個方法,它將一個模擬對象從Object
轉換爲SomeClass
,然後調用SomeClass
上的方法。
問題是getBean("SomeClass")
返回該方法的Object
,而不是SomeClass
如此嘲諷
when(mockApplicationContext.getBean("SomeClass")).thenReturn(mockSomeClass);
dosent工作作爲返回類型是錯誤的,嘲笑
when(mockApplicationContext.getBean("SomeClass")).thenReturn(mockObject);
dosent工作作爲方法SomeClass
dosent存在,我不能模擬SomeClass
。
這怎麼會被嘲笑?
測試方法。
public void anyMethod() {
// code omitted
((SomeClass) getApplicationContext().getBean("SomeClass")).someMethod(anArgument);
// ...
}
測試方法。
@Test
public void testAnyMethod() {
// ...
SomeClass mockSomeClass = mock(SomeClass.class);
when(mockSomeClass.someMethod(anArgument)).thenReturn(someResult);
ApplicationContext mockApplicationContext = mock(ApplicationContext.class);
when(mockApplicationContext.getBean("SomeClass")).thenReturn(mockSomeClass);
PowerMockito.doReturn(mockApplicationContext).when(GetContext.class, "getApplicationContext");
// ...
}
難道你沒有代碼錯誤嗎(至少在代碼片段中),應該是'when(mockSomeClass.someMethod(anArgument))。thenReturn(someResult);' – Brice 2014-10-29 13:53:17
另外它似乎代碼混合PowerMockito和Mockito API。我不認爲PowerMockito在這個測試中很有用。 – Brice 2014-10-29 13:55:33
無論如何,我沒有看到任何從'applicationContext.getBean()'返回'SomeClass'的問題(無論它是否是模擬的),因爲SomeClass繼承了'Object' – Brice 2014-10-29 14:03:33