带有 while 循环的方法的 JUnit
JUnit for a method with while loop
我在为带有 While 循环的方法编写 JUnit 测试时遇到了一些困难。我的方法如下所示:
private void deleteMethod(DeleteRequest dr){
// below statement am calling some service which returns me a object after querying it from Database.
SomeObject ob = db.getdata(dr);
while(ob != null) {
// this method deletes the Data from DB
db.deleteData(ob);
// again calling the same service operation as we did before while loop. I have a situation where my service only returns single record at a time. It is avoidable that I need to do a dirty job.
ob = db.getdata(dr);
}
下面是我的 JUnit:
@Test
public void testDeleteMethod() throws Exception{
DeleteRequest mockDR = new DeleteRequest();
mockDR.setX(y);
SomeObject mockOB = new SomeObject();
mockOB.setZ(k);
// making a mockcall to the method before I can assert anything
mockClassObject.deleteMethod(mockDR);
}
上面的 JUnit 方法一直在执行中,我知道它没有脱离 while 循环。我该如何解决这个问题。顺便提一下,我正在使用 Mockito 框架,但我不知道 Mockito 中是否有任何方法可以处理这种情况。
使用 Mockito,您必须模拟数据库连接并使用 @InjectMocks、构造函数注入或通过 setter 将其注入您的服务,然后再测试您的方法。这就是我编写测试的方式。
@Test
public void testDeleteMethod() throws Exception{
DeleteRequest deleteRequest = new DeleteRequest();
deleteRequest.setX(y);
SomeObject someObject = new SomeObject();
someObject.setZ(k);
Database db = Mockito.mock(Database.class);
// Notice chain of calls
Mockito.when(db.getdata(deleteRequest))
.thenReturn(someObject).thenReturn(null);
// TODO Inject the Database object into your mockClassObject.
// making a mock call to the method before I can assert anything
mockClassObject.deleteMethod(deleteRequest);
Mockito.verify(db, Mockito.times(2)).getdata(deleteRequest);
Mockito.verify(db).deleteData(someObject);
}
你可以看到我在 db.getData()
方法上链接了两次调用,第一次 returns someObject
和第二次 returns null
.
我在为带有 While 循环的方法编写 JUnit 测试时遇到了一些困难。我的方法如下所示:
private void deleteMethod(DeleteRequest dr){
// below statement am calling some service which returns me a object after querying it from Database.
SomeObject ob = db.getdata(dr);
while(ob != null) {
// this method deletes the Data from DB
db.deleteData(ob);
// again calling the same service operation as we did before while loop. I have a situation where my service only returns single record at a time. It is avoidable that I need to do a dirty job.
ob = db.getdata(dr);
}
下面是我的 JUnit:
@Test
public void testDeleteMethod() throws Exception{
DeleteRequest mockDR = new DeleteRequest();
mockDR.setX(y);
SomeObject mockOB = new SomeObject();
mockOB.setZ(k);
// making a mockcall to the method before I can assert anything
mockClassObject.deleteMethod(mockDR);
}
上面的 JUnit 方法一直在执行中,我知道它没有脱离 while 循环。我该如何解决这个问题。顺便提一下,我正在使用 Mockito 框架,但我不知道 Mockito 中是否有任何方法可以处理这种情况。
使用 Mockito,您必须模拟数据库连接并使用 @InjectMocks、构造函数注入或通过 setter 将其注入您的服务,然后再测试您的方法。这就是我编写测试的方式。
@Test
public void testDeleteMethod() throws Exception{
DeleteRequest deleteRequest = new DeleteRequest();
deleteRequest.setX(y);
SomeObject someObject = new SomeObject();
someObject.setZ(k);
Database db = Mockito.mock(Database.class);
// Notice chain of calls
Mockito.when(db.getdata(deleteRequest))
.thenReturn(someObject).thenReturn(null);
// TODO Inject the Database object into your mockClassObject.
// making a mock call to the method before I can assert anything
mockClassObject.deleteMethod(deleteRequest);
Mockito.verify(db, Mockito.times(2)).getdata(deleteRequest);
Mockito.verify(db).deleteData(someObject);
}
你可以看到我在 db.getData()
方法上链接了两次调用,第一次 returns someObject
和第二次 returns null
.