当前位置: 首页 > 知识库问答 >
问题:

单元测试Azure函数队列触发器

卫烨烁
2023-03-14

我有一个Java项目,它使用了一些Azure函数,如HttpTrigger和QueueTrigger。我使用azure fucnations quickstart原型来生成这个项目,因此它可以使用HttpTrigger的一些样板代码和它的单元测试,但对QueueTrigger没有任何帮助。我正试图得到帮助,为这个QueueTrigger编写一个好的单元测试,它实际上是从队列中读取消息(弹出)。队列的代码如下所示:

@FunctionName("queuehandler")
    public void dequeue(
        @QueueTrigger(name="qmsg", queueName=QUEUE_NAME, connection=QUEUE_CONNECTION) String qmsg,  // this is the event message
        @BindingName("DequeueCount") int count,  // number of times this message has been popped off the stack.
        @BindingName("ExpirationTime") Date expireTime // time it will expire
    )
    {

        log.info("Queue Receive {} DequeueCount:{} Expires:{}", qmsg, count, expireTime);

        StopWatch stopWatch = new StopWatch();
        stopWatch.start();

        try
        {
            EventGridEvent event = convertStringMsgToEventJSON(qmsg);
            MyClass.getInstance().handle(event);
        }
        catch(Exception ex)
        {
            log.error("Error handling queue dequeue count: {}, expires: {}, qmessage", count, expireTime, qmsg, ex);
            // Throwing an exception will cause the queue to retry this message again.
            // as per host.json, every failed message is retried for maximum of 3 times with an interval of 3 minutes
            throw ex;
        }
        finally
        {
            sw.stop();
            log.info("time it took to handle queue message: {}", sw.toString());
        }
    }

有没有人能推荐一下这个队列触发azure函数的标准单元测试?例如,看起来Boierplate HttpTrigger测试只是传递一个带有参数“name”和“azure”以及空主体的请求,并调用一个< code>assertEquals来使请求的状态为< code>200或< code>ok。

共有1个答案

郎慎之
2023-03-14

如果 Azure Functions 在 Java 中支持 DI,这会更简单,但就目前情况而言,您可能想要做的是将函数的主体提取到接受 MyClass 实例的单独方法中。然后,您可以测试该方法而不是函数本身。测试时,传入 MyClass 的模拟并断言调用 handle(),在实际函数中只需使用 MyClass.getInstance() 调用它。

 类似资料:
  • 在.NET core 2.0中使用创建时,我遇到了一个问题。 在体系结构中,当在用于创建用户的队列中创建新消息时,服务必须接收该消息并根据其中的信息在数据库中创建用户。 在Visual Studio2017中,我在下创建了一个新项目。 这种的正确实现是什么?在GitHub上有什么例子吗?提前道谢。

  • 本文向大家介绍azure-webjobs 队列触发器,包括了azure-webjobs 队列触发器的使用技巧和注意事项,需要的朋友参考一下 示例 一个简单的示例,定义一个由队列消息触发的功能: 它还支持POCO序列化:            

  • 我正在Azure中创建一个函数应用程序,并希望使用队列触发器。我知道如何在设计时配置队列名称,例如: 但是,我希望能够在配置文件中定义和引用它。我知道函数的存在。json(可能是这个),主机。json和本地。设置。json,但我不知道如何在其中设置队列名称并在函数中引用它。 如果我部署在VisualStudio中新创建的函数(使用新的15.3更新),我可以在函数中看到以下内容。部署后的json文件

  • 我正在使用带有队列触发器的Azure Functions。 当函数运行时,它会从Azure队列中删除一个项目。然而,有时我的处理会失败,在这种情况下,我想重新申请该项目,并在以后进行处理。 如何在Azure函数和使用Node中实现这一点。js?

  • 我遇到的情况是,Blob可能在第一次处理时失败,但可能在后续执行中工作。 我遇到的问题是关于监控真正的失败,目前第一次失败将抛出一个异常,该异常被记录并发出警报,但如果第一次重试成功完成,那么根据早期警报就没有什么可做的了。 是否有办法查看已发生的重试次数,以便我只能在不再重试时发出警报?

  • 我正在尝试将托管标识与Azure功能V3和QueueTrigger一起使用。功能代码的定义如下: 根据微软留档这应该是可能的通过定义一些额外的配置属性 https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference?tabs=blob#local-development-with-identity-based-c