【发布时间】:2020-12-08 06:46:04
【问题描述】:
我有一个从 Azure 表中检索值的服务类 (DataStore.cs)。我正在测试将服务类用于成功案例的方法。 Service类方法的Mock没有返回预期值(返回null)
被测方法是
public static class GetCellarBottleDetails
{
[FunctionName("GetCellarBottleDetails")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
ILogger log, ExecutionContext context, IDataStore dataStore = null)
{
log.LogInformation("Begin GetCellarBottleDetails request");
var stream = req.Body;
stream.Seek(0, SeekOrigin.Begin);
var azureTaskString = await new StreamReader(stream).ReadToEndAsync();
var key = JsonConvert.DeserializeObject<AzureTableKey>(azureTaskString);
if (key == null)
{
log.LogError($"Failed to Retrieve Bottle Details for Azure Table Key provided: {azureTaskString}");
return new StatusCodeResult(400);
}
log.LogInformation("GetCellarBottleDetails Api Request initiated");
dataStore ??= new DataStore(log, context);
var result = await dataStore.GetCellarBottleDetails(key);
if (result != null && result.GetType() == typeof(BottleDetailModel))
return new OkObjectResult(JsonConvert.SerializeObject(result));
log.LogError($"Failed to get bottle detail from DataStore.");
return new StatusCodeResult(500);
}
}
服务类方法签名为:
public async Task<BottleDetailModel> GetCellarBottleDetails(AzureTableKey BottleId)
我的模拟和设置是:
var ds = TestHelpers.CreateMockDataStore();
ds.Setup(s => s.GetCellarBottleDetails(TestParams.TestExpectedAzureTableKeyForBottle))
.Returns(Task.FromResult<BottleDetailModel>(TestParams.TestExpectedBottleDetailModel));
//.ReturnsAsync(TestParams.TestExpectedBottleDetailModel);
我已经根据其他 stackoverflow 答案尝试了“.Returns”和“.ReturnsAsync”,它们都产生了 null 的结果。
我对服务的调用如下:
var sut = await GetCellarBottleDetails.Run(
TestHelpers.CreateMockRequest(TestParams.TestExpectedAzureTableKeyForBottle).Object,
TestHelpers.CreateMockLogger().Object,
TestHelpers.CreateMockExecutionContext().Object, ds.Object);
我错过了什么?
【问题讨论】:
标签: c# azure unit-testing async-await moq