![](/img/trans.png)
[英]Cannot convert async lambda expression to delegate type 'Func<UIAccessibilityCustomAction, bool>
[英]Cannot convert async lambda expression to delegate
我正在为MS Bot对话框设置单元测试,但遇到以下错误,不确定如何解决。 有人可以帮忙吗? 谢谢
错误CS4010无法将异步lambda表达式转换为委托类型'
Task<HttpOperationResponse<BotData>>
'。 异步lambda表达式可能返回void,Task或Task<T>
,它们都不能转换为'Task<HttpOperationResponse<BotData>>
'。 D3DirectlineBot.UnitTests C:\\ Repos \\ D3DirectlineBot \\ D3DirectlineBot.UnitTests \\ MockConnectorFactory.cs 109有效
模拟课
public Mock<StateClient> MockIBots(MockConnectorFactory mockConnectorFactory)
{
var botsClient = new Moq.Mock<StateClient>(MockBehavior.Loose);
botsClient.Setup(d => d.BotState.SetConversationDataWithHttpMessagesAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<BotData>(), It.IsAny<Dictionary<string, List<string>>>(), It.IsAny<CancellationToken>()))
.Returns<string, string, BotData, Dictionary<string, List<string>>, CancellationToken>(async (channelId, conversationId, data, headers, token) =>
{
return await mockConnectorFactory.UpsertData(channelId, null, conversationId, BotStoreType.BotConversationData, data);
});
return botsClient;
}
UpsertData类
protected async Task<HttpOperationResponse<object>> UpsertData(string channelId, string userId, string conversationId, BotStoreType storeType, BotData data)
{
var _result = new HttpOperationResponse<object>();
_result.Request = new HttpRequestMessage();
try
{
var address = AddressFrom(channelId, userId, conversationId);
await memoryDataStore.SaveAsync(address, storeType, data, CancellationToken.None);
}
catch (HttpException e)
{
_result.Body = e.Data;
_result.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.PreconditionFailed };
return _result;
}
catch (Exception)
{
_result.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError };
return _result;
}
_result.Body = data;
_result.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
return _result;
}
您应该返回Task而不必等待它:
return mockConnectorFactory.UpsertData(channelId, null, conversationId, BotStoreType.BotConversationData, data);
UpsertData类 :将HttpOperationResponse<object>
更改为HttpOperationResponse<Botdata>
protected async Task<HttpOperationResponse<Botdata>> UpsertData(string channelId, string userId, string conversationId, BotStoreType storeType, BotData data)
{
var _result = new HttpOperationResponse<Botdata>();
_result.Request = new HttpRequestMessage();
try
{
var address = AddressFrom(channelId, userId, conversationId);
await memoryDataStore.SaveAsync(address, storeType, data, CancellationToken.None);
}
catch (HttpException e)
{
_result.Body = data;
_result.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.PreconditionFailed };
return _result;
}
catch (Exception)
{
_result.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError };
return _result;
}
_result.Body = data;
_result.Response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
return _result;
}
MockConnectionFactory类 :如@DmitryBogatykh所述,删除了async
并await
botsClient.Setup(d => d.BotState.SetConversationDataWithHttpMessagesAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<BotData>(), It.IsAny<Dictionary<string, List<string>>>(), It.IsAny<CancellationToken>()))
.Returns((string channelId, string conversationId, BotData data, Dictionary<string, List<string>> headers, CancellationToken token) =>
{
return mockConnectorFactory.UpsertData(channelId, null, conversationId, BotStoreType.BotConversationData, data);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.