如何模拟和单元测试javax.persistence.EntityManager和javax.persstence.Qu



测试方法时。我遇到了需要向其传递查询的实体管理器。

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(;

相关内容

最新更新