[英]NullPointerException while invoking mocked method using Mockito
[英]Mocked Method is throwing NullPointerException in Mockito
這是我的考試課
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest extends Service{
@Mock
EntityManager eman = Mockito.mock(EntityManager.class);
@Mock
Query query;
@InjectMocks
private Service service;
private static final String NAME = "name";
@Before
public void setUp() {
this.service=new Service();
}
@Test
public void firstMethodTest() {
Query query = mock(Query.class);
when(
eman.createNamedQuery(NAME)).thenReturn(query);
when
( query.setParameter("name", Type)).thenReturn(query);
when (query.getSingleResult()).thenReturn(type);
**service.getAllMethod(1, "string");**
assertSame(/*Something to compare */);
}
}
這是我的服務類別方法
public getAllMethod(int ID, String string)
{
Query query=em
.createNamedQuery("name");
**query.setParameter("string", Type);**
type= query.getSingleResult();
}
當從模擬對象調用service.getAllMethod(1,“ String”)時 ,我在query.setParameter(“ name”,Type)處獲取NPE,因為我認為查詢仍然為NULL。 請假設我的服務運行正常。 提前致謝
在調試時,我檢查服務類中Query query的值。它的值為null。無法弄清楚如何解決此問題。
您將在每次測試之前重新創建服務。 因此,Mockito向其注入模擬的Service
已丟失。
擺脫setUp
方法,改為聲明服務,如下所示:
@InjectMocks
private Service service = new Service();
還有其他一些錯誤。 例如,不需要EntityManager
Mockito.mock
,測試類不應擴展Service
,不使用@Mock Query
。
下面是一個粗略的模板:
@RunWith(MockitoJUnitRunner.class)
public class TestA {
@Mock
EntityManager eman;
@InjectMocks
private Service service = new Service();
@Test
public void firstMethodTest() {
Query query = Mockito.mock(Query.class);
Mockito.when(eman.createNamedQuery(NAME)).thenReturn(query);
service.getAllMethod(1, "string");
}
}
假設服務類似於:
public class Service {
@Autowired
EntityManager entityManager;
public void getAllMethod(int i, String s) {
Query q = entityManager.createNamedQuery("name");
... q isn't null here for me
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.