所以我想标题说明了所有问题,只要有人可以更好地帮助他人告诉我更新标题,那么我在Mockito中遇到的问题就是我拥有类似
的代码List<TimeZone> timeZones = entityManager
.createNamedQuery("get.Alltimezone", TimeZone.class).getResultList();
,并且我想返回所有时区,但是当我使用模拟创建命名查询时,我得到了空指针异常原因,当调用.getResultList时,我将得到空指针,并且我需要帮助来修复试图在我的测试中做到这一点
Query query = mock(Query.class);
when(caseSetTimezone.entityManager.createNamedQuery(anyString())).thenReturn(query);
List<TimeZone> captureTimezone;
ArgumentCaptor<TimeZone> argumentCaptor = ArgumentCaptor.forClass(TimeZone.class);
verify(caseSetTimezone.entityManager , times(1)).persist(argumentCaptor.capture());
captureTimezone = argumentCaptor.getAllValues();
assertThat(captureTimezone.get(0).getTimezone()).isEqualTo("Europe/Athens");
但是这似乎都不起作用,我总是在createNamedQuery中得到空指针异常,如何正确模拟实体管理器,以便在创建命名查询时它会返回我想要的东西
答案 0 :(得分:0)
这是单参数方法的设置。您需要的是:
Query query = mock(Query.class);
when(caseSetTimezone.entityManager
.createNamedQuery(anyString(), any(Class.class)).thenReturn(query);
当然,entityManager也必须是模拟的。
答案 1 :(得分:0)
所以我的问题是我尝试返回一个查询而不是TypeQuery,所以这可能会对某人有所帮助
TypedQuery query = mock(TypedQuery.class);
when(caseSetTimezone.entityManager.createNamedQuery("get.Alltimezone" , TimeZone.class)).thenReturn(query);