我从耐用的Azure Functions(最新版本)开始,它是单元测试(使用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;
}
}
我为Orchestrator函数编写的单元测试方法如下所示:
[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
ie第一行的错误
mockContext.Setup(x => x.CallActivityAsync<List<string>>("funcActivityA", "")).ReturnsAsync(funcActivityAOutput);`
我在哪里错了?
在您的设置中,假设List<string>
已将模拟成员定义为
IDurableOrchestrationContext.CallActivityAsync<TResult>(String, Object) Method
public Task<TResult> CallActivityAsync<TResult> (string functionName, object input);
哪里
TResult:计划活动函数的返回类型。
确保为模拟成员使用了正确的返回类型。这样,ReturnsAsync
可以在设置中调用正确的扩展名
例如
//...
List<string> funcActivityAOutput = new List<string>() {
//...populate list as needed
}
var mockContext = new Mock<IDurableOrchestrationContext>();
mockContext
.Setup(x => x.CallActivityAsync<List<string>>("funcActivityA", ""))
.ReturnsAsync(funcActivityAOutput);
//...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句