Azure队列触发器函数单元测试中的模拟ExecutionContext

efzxgjgh  于 2023-01-18  发布在  其他
关注(0)|答案(3)|浏览(137)

当测试一个队列触发器函数时,我如何模拟ExecutionContext?下面是我使用ExecutionContext获取一些设置值的示例函数,我将在函数的后面使用这些设置值,我还需要为这些设置提供测试值。

[FunctionName("ProcessQueueFunction")]
public static void Run([QueueTrigger("process-queue", Connection = "AzureWebJobsStorage")]string queueItem, ILogger log, ExecutionContext context)
{
   var config = new ConfigurationBuilder()
       .SetBasePath(context.FunctionAppDirectory)
       .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
       .AddEnvironmentVariables()
       .Build();

       var customConfiguraion = config.GetSection("CustomSection");

       //do stuff...
}

我可以做一些链接,但给我错误的FunctionAppDirectory是无效的或空的。我需要设置FunctionAppDirectory为什么?或者这是一个不正确的方式来完成?

var mockContext = new Mock<ExecutionContext>();
mockContext.Object.FunctionAppDirectory = string.Empty; //or any other value

ProcessQueueFunction.Run("TestQueueItem", log: logger, context: mockContext.Object);
fhity93d

fhity93d1#

您可以直接传递Execution Context,而不必仅仅为了使用属性而模拟类。

ExecutionContext executionContext = new ExecutionContext();
executionContext.FunctionAppDirectory = "PATH";

ProcessQueueFunction.Run("TestQueueItem", log: logger, context: executionContext);
cuxqih21

cuxqih212#

执行上下文=新的执行上下文();执行上下文。函数应用目录=“";
处理队列函数。运行(“处理文件”,日志:记录器,上下文:执行上下文);

gywdnpxw

gywdnpxw3#

ExecutionContext属于NuGet Microsoft.Azure.WebJobs.ExecutionContext,你可以这样模仿FunctionAppDirectory

var mockContext = new Mock<Microsoft.Azure.WebJobs.ExecutionContext>();
mockContext 
    .Setup(x => x.FunctionAppDirectory)
    .Returns(Directory.GetCurrentDirectory()); // Add your directory value inside Returns

var theContextObject = mockContext.Object;

theContextObject是你可以传入的对象示例。当FunctionAppDirectory被调用时,你的当前目录将被返回。你可以根据你想要返回的FunctionAppDirectory来调整Returns

相关问题