Я начинаю с Durable Azure Функции (последняя версия) и его модульное тестирование (с использованием x-unit). Ниже приведена моя триггерная функция (сработала http):
[FunctionName("funcEventSubscriber")]
public async Task<HttpResponseMessage> HttpStart(
[HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequestMessage req,
[DurableClient] IDurableOrchestrationClient starter,
ILogger log)
{
try
{
string instanceId = await starter.StartNewAsync("funcEventOrchestrator", null);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
catch (System.Exception ex)
{
_telemetryHelper.LogException(ex);
throw;
}
}
А вот моя функция оркестратора, которая запускает функции активности:
[FunctionName("funcEventOrchestrator")]
public async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
try
{
var outputs = new List<string>();
var reusultSet = new List<string>();
outputs = await context.CallActivityAsync<List<string>>("funcActivityA", "");
foreach (var item in outputs)
{
var result = await context.CallActivityAsync<List<TableRegionEntity>>("funcActivityB", item);
if (result.Count > 0)
{
foreach (var data in result)
{
List<string> inputObject = new List<string>();
inputObject.Add(data.Subscriber);
inputObject.Add(item);
reusultSet.Add(await context.CallActivityAsync<string>("funcActivityC", inputObject));
}
}
else
{
reusultSet.Add(await context.CallActivityAsync<string>("funcActivityD", item));
}
}
return reusultSet;
}
catch (System.Exception ex)
{
_telemetryHelper.LogException(ex);
throw;
}
}
Метод модульного теста, который я имею написанная для моего оркестратора функция выглядит примерно так:
[Fact]
public async Task Run_returns_list_of_string()
{
var mockContext = new Mock<IDurableOrchestrationContext>();
mockContext.Setup(x => x.CallActivityAsync<List<string>>("funcActivityA", "")).ReturnsAsync(funcActivityAOutput);
mockContext.Setup(x => x.CallActivityAsync<List<TableRegionEntity>>("funcActivityB", inputJsonString)).ReturnsAsync(funcActivityBOutput);
mockContext.Setup(x => x.CallActivityAsync<string>("funcActivityC", funcActivityCInputObject)).ReturnsAsync(funcActivityCOutput);
mockContext.Setup(x => x.CallActivityAsync<string>("funcActivityD", inputJsonString)).ReturnsAsync(funcActivityDOutput);
// Instantiate funcEventSubscriber
funcEventSubscriber funcEventSubscriberObj = new funcEventSubscriber(telemetryHelperMock.Object);
// Act
var result = await funcEventSubscriberObj.RunOrchestrator(mockContext.Object); // call orchestrator fn
// Assert
Assert.Equal(3, result.Count);
}
Способ, которым я настраиваю mockContext
, выдает ошибку. Это ошибка из первой строки mockContext.Setup
, т. Е.
mockContext.Setup(x => x.CallActivityAsync<List<string>>("funcActivityA", "")).ReturnsAsync(funcActivityAOutput);`
Где я здесь ошибаюсь?