gpt4 book ai didi

java - 如何模拟包装在 JAXBElement 中的对象

转载 作者:行者123 更新时间:2023-12-02 11:38:16 24 4
gpt4 key购买 nike

考虑 JAXB 生成的以下代码:

public class CnpOnlineResponse {

protected JAXBElement<? extends TransactionTypeWithReportGroup> transactionResponse;

public JAXBElement<? extends TransactionTypeWithReportGroup> getTransactionResponse() {
return transactionResponse;
}

public void setTransactionResponse(JAXBElement<? extends TransactionTypeWithReportGroup> value) {
this.transactionResponse = value;
}
}

public class AuthorizationResponse extends TransactionTypeWithReportGroup {

}

public class ObjectFactory {

public JAXBElement<AuthorizationResponse> createAuthorizationResponse(AuthorizationResponse value) {
return new JAXBElement<AuthorizationResponse>(_AuthorizationResponse_QNAME, AuthorizationResponse.class, null, value);
}
}

我正在编写一个测试,其中我模拟了 CnpOnlineResponse 和 AuthorizationResponse:

@Mock private CnpOnlineResponse mockCnpOnlineResponse;
@Mock private AuthorizationResponse mockAuthorizationResponse;

final JAXBElement<AuthorizationResponse> authorization = CnpContext.getObjectFactory().createAuthorizationResponse(mockAuthorizationResponse);

when(mockCnpOnlineResponse.getTransactionResponse()).thenReturn(authorization); // <= ERROR here

但是我收到以下编译错误:

The method thenReturn(JAXBElement<capture#1-of ? extends TransactionTypeWithReportGroup>) in the type OngoingStubbing<JAXBElement<capture#1-of ? extends TransactionTypeWithReportGroup>> is not applicable for the arguments (JAXBElement<AuthorizationResponse>)

感谢任何帮助,我不明白为什么它认为 thenReturn 没有传递所需类型的对象。

最佳答案

这似乎混淆了类型推断。

使用thenAnswer (或更短的 then )。

when(mockCnpOnlineResponse.getTransactionResponse()).then(i -> authorization);

i -> authorization是一个计算结果为 Answer<? extends TransactionTypeWithReportGroup> 的 lambda 表达式通过捕获它能够匹配。

关于java - 如何模拟包装在 JAXBElement 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48769666/

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