unit Mocking EntityManager (Mockito)



我的一个类中有以下代码:

@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...
}

正如您所看到的,预期的行为是返回空列表,并且打印零动物名称。然而,事实并非如此,数据库中的实际动物正在列表中返回。我错过了什么?我尝试了几种不同的方法,结果都是一样的。

感谢阅读。

在您的问题中,您直接在被测系统的字段上使用@Autowired,这似乎指示Spring解决依赖关系。它很可能是根据您的实际(生产(配置来实现的。

相比之下,常见的Mockito注释是@InjectMocks,它忽略Spring,使用尽可能多的@Mock对象实例化对象。

相关SO问题:在测试期间注入@Autowired变量

相关内容

  • 没有找到相关文章

最新更新