【发布时间】:2018-08-21 07:26:20
【问题描述】:
我正在为 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;
}
【问题讨论】:
标签: c# unit-testing moq