本机查询上的 Mockito NullPointerException

Mockito NullPointerException on Native Query

我的查询对象有问题,即使我用查询模拟对象对其进行存根,它也变为空。 这是代码

Query query = getEntityManager().createNativeQuery(queryString, SomeRandom.class);

return query.getResultList(); //-->This is where I get the error, the query object is null.

我的测试方法是

Query query = mock(Query.class);
when(entityManager.createNativeQuery("", SomeRandom.class)).thenReturn(query);
List<SomeRandom> someList = requestDao.getSomeList(parameter, parameter, parameter, parameter);

我能够用这段代码做到这一点,我用过 This作为我的参考。

Class<?> type = Mockito.any();
when(entityManager.createNativeQuery(Mockito.anyString(), type)).thenReturn(query);

这可能意味着您传递给模拟方法的匹配器之一不匹配。您传递了一个实际的 String 实例(空字符串),它在后台转换为 Equals matcher。您的示例仅在 queryString 也是空字符串时才有效。

这应该匹配任何查询字符串:

when(entityManager.createNativeQuery(anyString(), eq(SomeRandom.class)))
  .thenReturn(query);

这是您希望传递的一些具体字符串:

String expectedQueryString = "select 1";

when(entityManager.createNativeQuery(expectedQueryString, SomeRandom.class))
  .thenReturn(query);

根据评论编辑:

如果从 eq(SomeRandom.class) 更改为 any() 解决了问题,那么 eq(SomeRandom.class) 匹配器不匹配,这意味着 SomeRandom.class 不是实际传递给的模拟方法。