gpt4 book ai didi

java - 为 Future 回调编写 junit 测试用例

转载 作者:行者123 更新时间:2023-12-02 09:31:07 31 4
gpt4 key购买 nike

有人可以帮助为下面的代码部分(尤其是添加回调部分)编写 JUnit 测试吗?我不知道如何使用回调为 Listenablefuture 编写单元测试用例

    private void handleResponse(final ListenableFuture<UserRecordResult> response, CompletableFuture future) {

Futures.addCallback(response, new FutureCallback<UserRecordResult>() {

@Override
public void onFailure(@Nonnull Throwable throwable) {

future.completeExceptionally(new Exception("Fail to put record" + throwable.getMessage()));
}

@Override
public void onSuccess(UserRecordResult result) {
if(result.isSuccessful()) {
future.complete(true);
} else {
future.completeExceptionally(new Exception("Fail to put record"));
}
}
});
}

最佳答案

您可以通过以下方式 stub ListeneableFutureCompletableFuture 进行测试:

@Test
public void completeExceptionallyOnCallbackFailure() {
ListenableFuture<UserRecordResult> failureResponse = Futures.immediateFailedFuture(new RuntimeException());
CompletableFuture future = new CompletableFuture();

handleResponse(failureResponse, future);

assertThat(future.isCompletedExceptionally(), equalTo(true));
}

@Test
public void completeExceptionallyIfUserRecordResultIsNotSuccessful() {
UserRecordResult mockResult = Mockito.mock(UserRecordResult.class);
Mockito.when(mockResult.isSuccessful()).thenReturn(false);

ListenableFuture<UserRecordResult> failureResponse = Futures.immediateFuture(mockResult);
CompletableFuture future = new CompletableFuture();

handleResponse(failureResponse, future);

assertThat(future.isCompletedExceptionally(), equalTo(true));
}

@Test
public void completeSuccessfully() throws ExecutionException, InterruptedException {
UserRecordResult mockResult = Mockito.mock(UserRecordResult.class);
Mockito.when(mockResult.isSuccessful()).thenReturn(true);

ListenableFuture<UserRecordResult> successResponse = Futures.immediateFuture(mockResult);
CompletableFuture future = new CompletableFuture();

handleResponse(successResponse, future);

assertThat(future.get(), equalTo(true));
}

此外,您还可以使用 assertj 断言实际的错误消息:

@Test
public void verifyMessageIfCompletedExceptionallyAfterUserRecordResultIsNotSuccessful() {
UserRecordResult mockResult = Mockito.mock(UserRecordResult.class);
Mockito.when(mockResult.isSuccessful()).thenReturn(false);

ListenableFuture<UserRecordResult> failureResponse = Futures.immediateFuture(mockResult);
CompletableFuture future = new CompletableFuture();

Assertions.assertThatThrownBy(() -> {
handleResponse(failureResponse, future);
future.get();
})
.isInstanceOf(Exception.class)
.hasMessage("java.lang.Exception: Fail to put record");
}

关于java - 为 Future 回调编写 junit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57964632/

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