我正在尝试对使用dapr客户端进行服务到服务调用的dotnet函数进行单元测试。我模拟了dapr客户端,但无法使用InvokeMethodAsync
进行测试。我收到错误消息
错误NS1000:无法截获成员InvokeMethodAsync。只能截获接口成员以及虚拟、重写和抽象成员。
我的服务功能:
public async Task<TransactionResponse> GetTransactionDetails(Transaction transaction){
// Fetch transaction details from another service
var response = await _daprClient.InvokeMethodAsync<TransactionResponse>(HttpMethod.Get, "svc-transactions", transaction.id);
return response;
}
我在单元测试中尝试模拟的方法是:
// Set up the Dapr client to return the expected response
_daprClient
.InvokeMethodAsync<TransactionResponse>(HttpMethod.Get, "svc-transactions", "123")
.Returns(transactionResponse);
我使用xUnit进行单元测试沿着使用NSubstitute进行模拟。
1条答案
按热度按时间r1zk6ea11#
看起来DaprClient没有可以被
NSubstitute
模仿的接口或抽象类,正如NSubstitute
的文档正确地指出的那样:“如果您不能通过手动编写子类来覆盖成员,那么NSubstitute也不能!"。解决此问题的方法是创建一个接口(IDaprAccessor
)并创建一个实现此接口的类(DaprAccessor
)。然后在代码中的任何地方使用
DaprAccessor
,而根本不必接触DaprClient。