我的一个班级中有以下代码:
@PersistenceContext
protected EntityManager entityManager;
public entryPoint() {
for(Animal:getTheAnimals()) {
System.out.println(Animal.getName());
}
}
private List<Animal> getTheAnimals() {
return List<Animal>entityManager.createNamedQuery("myQuery").setParameter("myParam", new Date()).getResultList();
}
在我的测试课程中,我有以下内容:
@Mock
private EntityManager entityManager;
@Mock
private Query query;
@Autowired
private ClassToTest classToTest;
@Test
public void someTest() {
List<Animal> list = new ArrayList<Animal>();
Mockito.when(entityManager.createNamdeQuery("myQuery")).thenReturn(query);
Mockito.when(query.setParameter(any(String.class), any(java.util.Date.class)).getResultList()).thenReturn(list);
...something more here...
}
正如您所看到的,预期的行为是返回空列表,并打印零动物名称。然而情况并非如此,并且db中的实际动物正在列表中返回。我错过了什么?我尝试了几种相同的结果。
感谢阅读。
答案 0 :(得分:1)
在您的问题中,您直接在被测系统的字段上使用@Autowired
,这似乎指示Spring解决依赖关系。它可能是从您的实际(生产)配置中完成的。
相比之下,常见的Mockito注释是@InjectMocks
,它忽略了Spring,使用尽可能多的@Mock
个对象来实例化对象。