本机查询上的 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
不是实际传递给的模拟方法。
我的查询对象有问题,即使我用查询模拟对象对其进行存根,它也变为空。 这是代码
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
不是实际传递给的模拟方法。