gpt4 book ai didi

mockito - JUnit 用于带有 while 循环的方法

转载 作者:行者123 更新时间:2023-12-01 12:31:58 26 4
gpt4 key购买 nike

我在为带有 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、构造函数注入(inject)或通过 setter 将其注入(inject)到您的服务中。这就是我将如何编写您的测试的方式。

@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() 上的调用。方法两次,第一次返回 someObject第二次返回 null .

关于mockito - JUnit 用于带有 while 循环的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com