测试方法时。我遇到了需要向其传递查询的实体管理器。
StringBuilder jpqlQuery=new StringBuilder("select Distinct s.modelCode from Model s where 1=1");
Query query = entityManager.createQuery(jpqlQuery.toString());
if(myModel != null ) {
jpqlQuery.append(" and s.name = :name");
}
if(myModel != null){
query.setParameter("name", myModel.getFirstName());
}
我可以输入jpqlquery.append条件,但无法进入query.setParameter.
我在获得NullPointerExceptionQuery query = entityManager.createQuery(jpqlQuery.toString());
以下是我的测试方法:
@Test
public void testGetModelNameDetails() {
List<String> results = new ArrayList<>();
ModelDTO myModel = Mockito.mock(ModelDTO.class);
StringBuilder jpqlQuery = new StringBuilder("select Distinct s.modelCode from Model s where 1=1");
when(myModel.getFirstName()).thenReturn("Downtown");
when(em.createQuery(jpqlQuery.toString())).thenReturn(query);
when(query.getResultList()).thenReturn(results);
serviceImpl.getNameDetails(myModel);
}
在调试的when(em.createQuery(jpqlQuery.toString())).thenReturn(query);
行,我可以看到查询对象是模拟查询对象。但在测试方法内部,即。在这一行:Query query = entityManager.createQuery(jpqlQuery.toString());
,查询对象为空。
因此,我在query.setParameter("name", myModel.getFirstName());
上得到NullPointerException
在Test类的开头,我模拟entityManager和query@MockEntityManager EntityManager;
@Mock
Query query;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
entityManager = Mockito.mock(em.class);
query = Mockito.mock(Query.class);
}
我在这里错过了什么或做错了什么?
已解决!when(entityManager.createQuery(Mockito.anyString((((.thenReturn(query(;