gpt4 book ai didi

testing - Vertx 使用 Handler> 参数模拟一个异步方法

转载 作者:行者123 更新时间:2023-11-28 19:59:50 26 4
gpt4 key购买 nike

我有这个数据访问接口(interface):

public interface UserDao {

void loadUsers(Handler<AsyncResult<List<User>>> handler);

}

它被用在这样的服务中:

public class UserService {

private UserDao userDao;

public UserService(UserDao UserDao) {
this.userDao = userDao;
}

public void getUsers(Future<List<User>> future) {
userDao.loadUsers( ar ->{
if (ar.succeeded()){
List<User> users = ar.result();
// process users
future.complete(users);
}else {
// handle the error
}
});
}
}

现在我打算对我的服务进行单元测试并模拟数据访问层。每次调用 UserDao 类的 getUsers 方法时,我都想返回一组固定的结果。

@Test
public void testGetUsers(TestContext context) {

Async async = context.async();

UserDao mockUserDao = Mockito.mock(UserDao.class);

UserService userService = new UserService(mockUserDao);
List<User> mockResult = Arrays.asList(new User(), new User());

/* (?) How to make mockUserDao return mockResult through its Handler argument? */

Future<List<User>> future = Future.future();
userService.getUsers(future);
future.setHandler(ar -> {
assertEquals(2, ar.result().size());
async.complete();
});

async.awaitSuccess();

}

我该怎么做?它不符合正常的 Mockito 模式 when(serviceMock.method(any(Argument.class))).thenAnswer(new Result()) 因为 mockResult 不是从每个方法都是通过处理程序说的。

最佳答案

stub 函数。

public class TestUserDao implements UserDao {
void loadUsers(Handler<AsyncResult<List<User>>> handler) {
handler.apply(mockResult)
}
}

UserDao userDao = mock(UserDao.class, AdditionalAnswers.delegatesTo(new TestUserDao()));
verify(userDao).loadUsers(any());

关于testing - Vertx 使用 Handler<AsyncResult<>> 参数模拟一个异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49291970/

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