繁体   English   中英

如何对Azure Webjobs V3进行集成测试?

[英]How to do Integration Tests for Azure Webjobs V3?

Azure Webjob现在在V3上,因此该答案不再是最新的( 如何集成测试Azure Web Jobs?

我想我们需要做这样的事情:

            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            using (host)
            {
                var jobHost = host.Services.GetService(typeof(IJobHost)) as JobHost;
                var arguments = new Dictionary<string, object>
                {
                    // parameters of MyQueueTriggerMethodAsync
                };

                await host.StartAsync();
                await jobHost.CallAsync("MyQueueTriggerMethodAsync", arguments);
                await host.StopAsync();
            }

队列触发功能

    public MyService(
        ILogger<MyService> logger
    )
    {
        _logger = logger;
    }

    public async Task MyQueueTriggerMethodAsync(
        [QueueTrigger("MyQueue")] MyObj obj
    )
    {
        _logger.Log("ReadFromQueueAsync success");
    }

但是之后,我怎么知道发生了什么呢?

您建议能够对Azure Webjobs V3进行集成测试吗?

我猜这是与Github的交叉发布。 产品团队建议查看自己的端到端测试,以获取有关如何处理集成测试的想法。

总结一下:

可以将 IHost 配置TestHost并向其中添加集成服务。

public TestFixture()
{
     IHost host = new HostBuilder()
         .ConfigureDefaultTestHost<TestFixture>(b =>
         {
              b.AddAzureStorage();
         })
         .Build();

         var provider = host.Services.GetService<StorageAccountProvider>();
         StorageAccount = provider.GetHost().SdkObject;
}

测试看起来像这样:

/// <summary>
/// Covers:
/// - queue binding to custom object
/// - queue trigger
/// - table writing
/// </summary>
public static void QueueToICollectorAndQueue(
    [QueueTrigger(TestQueueNameEtag)] CustomObject e2equeue,
    [Table(TableName)] ICollector<ITableEntity> table,
    [Queue(TestQueueName)] out CustomObject output)
{
    const string tableKeys = "testETag";

    DynamicTableEntity result = new DynamicTableEntity
    {
        PartitionKey = tableKeys,
        RowKey = tableKeys,
        Properties = new Dictionary<string, EntityProperty>()
        {
            { "Text", new EntityProperty("before") },
            { "Number", new EntityProperty("1") }
        }
    };

    table.Add(result);

    result.Properties["Text"] = new EntityProperty("after");
    result.ETag = "*";
    table.Add(result);

    output = e2equeue;
}

设置特定测试的难度取决于您所使用的触发器和输出以及是否使用仿真器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM