8
我遵循@hoaz的建議。但是,我得到空指針異常Mockito NullPointerException
@RunWith(MockitoJUnitRunner.class)
public class GeneralConfigServiceImplTest {
@InjectMocks private GeneralConfigService generalConfigService;
@Mock private SomeDao someDao;
@Mock private ExternalDependencyClass externalDependencyObject
@Test
public void testAddGeneralConfigCallDAOSuccess() {
when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234")));
//println works here, I am able to get collection from my mocked DAO
// Calling the actual service function
generalConfigService.process(externalDependencyObject)
}
}
在我的代碼是這樣的:
import com.xyz.ExternalDependencyClass;
public class GeneralConfigService{
private SomeDao someDao;
public void process(ExternalDependencyClass externalDependencyObject){
// function using Mockito
Collection<String> result = someDao.findMe(externalDependencyObject.getId.toString())
}
}
我也注意到,DAO爲空,所以我這樣做(僅舉,我做了下面的步驟來嘗試,我知道springUnit和或的Mockito XYZ之間的差異):
@Autowired
private SomeDao someDao;
@約翰B溶液解決我的問題。不過,我想提一下對我來說不起作用的東西。這是我更新單元測試
@Test
public void testAddGeneralConfigCallDAOSuccess() {
/*
This does not work
externalDependencyObject.setId(new ExternalKey("pk_1"));
// verify statement works and I thought that the class in test when call the getId
// it will be able to get the ExternalKey object
//verify(externalDependencyObject.setId(new ExternalKey("pk_1")));
*/
// This works
when(externalDependencyObject.getId()).thenReturn(new ExternalKey("pk_1"));
when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234")));
....
// Calling the actual service function
generalConfigService.process(externalDependencyObject)
}
引用這個問題在:
How do I mock external method call with Mockito
How do I set a property on a mocked object using Mockito?
你爲什麼嘲笑你自動裝配的東西?它聞起來像這樣,應該是純粹的春季風格的整合測試,或純粹的模擬測試。 – Makoto
自從我運行NullPointer的異常之後,我試圖執行@Autowired步驟,但即使在此之後,它仍會運行異常。我看到,當'someDao.findMe(someObject.getId.toString())'執行它不會觸發我的MockDao return語句,而是嘗試評估'someObject.getId.toString()'。當我在'someDao.findMe'的測試中做println時,它會返回集合。我也檢查了調試,'someDao'已經將屬性設置爲generalConfigService。所以不知道爲什麼它正在評估,而不僅僅是返回我的收藏 – Anuj