我遵循了 @hoaz 的建议,但是我得到了一个空指针异常。
@John B的解决方案解决了我的问题。但我想提一下对我没有起作用的部分。这是我的更新后的单元测试。
在以下问题中引用了本问题:
@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是null,所以我做了这个(只是为了提醒,我做下面的步骤尝试过,我知道springUnit和Mockito或xyz之间的区别):
我也注意到 DAO 是 null,所以我进行了以下操作(仅仅是为了说明一下,我做了下面这个步骤尝试过,我知道 Spring Unit 和 Mockito 或其他类库之间的区别):
@Autowired
private SomeDao someDao;
@John 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)
}
在以下问题中引用了本问题:
someDao.findMe(someObject.getId.toString())
执行时,它不会触发我的MockDao返回语句,而是尝试评估someObject.getId.toString()
。当我在someDao.findMe
的测试中进行println时,确实返回了集合。我还检查了调试,someDao
已经将属性设置为generalConfigService。所以不知道为什么它要进行评估而不仅仅返回我的集合。 - Anuj