测试代理消息

问题描述 投票:0回答:1

现在我正在编写关于天蓝色服务总线触发器功能的单元测试。非常需要模拟以某种方式传递到函数中的BrokeredMessage对象。功能声明如下:

public static void Run(
            [ServiceBusTrigger("saas01.queue.dbmigration", AccessRights.Manage, Connection = "connection")]BrokeredMessage message)

不幸的是,我找不到任何适用的方式来嘲笑它。它几乎没有嘲笑du这个类是密封的,我不能事件创建它周围的包装。你有一些想法吗?谢谢你的帮助

,

c# unit-testing azure mocking azure-functions
1个回答
1
投票

一种解决方案是创建一个可以测试的BrokeredMessage包装器,就像here一样。 Here's也是ServiceBus团队的一篇MSDN帖子,它也谈到了使用包装器。

请注意,Azure Functions V2使用Message class,它是公共的而不是密封的。

    [FunctionName("ServiceBusFunc")]
    public static void Run([ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "ServiceBus")]BrokeredMessage myQueueItem, TraceWriter log)
    {
        var message = new MyBrokeredMessage(myQueueItem);
        BusinessLogic(message, log);
    }

    public static void BusinessLogic(MyBrokeredMessage myMessage, TraceWriter log)
    {
        var stream = myMessage.GetBody<Stream>();
        var reader = new StreamReader(stream);
        log.Info($"C# ServiceBus queue trigger function processed message: '{reader.ReadToEnd() }'");
    }

    public class MyBrokeredMessage
    {
        private BrokeredMessage _msg;

        public MyBrokeredMessage(BrokeredMessage msg) => _msg = msg;

        public T GetBody<T>()
        {
            return _msg.GetBody<T>();
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.