测试代理消息

时间:2018-04-27 20:40:41

标签: c# unit-testing azure mocking azure-functions

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

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

不幸的是,我无法找到任何适用的方式来嘲笑它。它很难嘲笑这个类是密封的,我不能在它周围创建包装器。你有一些想法吗? 谢谢你的帮助

1 个答案:

答案 0 :(得分: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>();
        }
    }