所以我想标题说明了一切,如果任何人都可以帮助他人做得更好,只是告诉我更新标题,所以我对Mockito的问题是我有一个代码,例如
List<TimeZone> timeZones = entityManager
.createNamedQuery("get.Alltimezone", TimeZone.class).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中获得null指针异常,我该如何正确模拟Entity Manager,以便当我创建命名查询时,它会回馈我想要的
这是一个单品方法的设置。您需要的是:
Query query = mock(Query.class);
when(caseSetTimezone.entityManager
.createNamedQuery(anyString(), any(Class.class)).thenReturn(query);
当然,EntityManager也需要是一个模拟。
,所以我的问题是我尝试返回查询而不是类型,所以这可能是如何帮助某人的
TypedQuery query = mock(TypedQuery.class);
when(caseSetTimezone.entityManager.createNamedQuery("get.Alltimezone" , TimeZone.class)).thenReturn(query);