现在我正在编写关于天蓝色服务总线触发功能的单元测试
非常需要模拟以某种方式传递给函数的BrokeredMessage
对象。功能声明如下:
public static void Run(
[ServiceBusTrigger("saas01.queue.dbmigration", AccessRights.Manage, Connection = "connection")]BrokeredMessage message)
不幸的是,我无法找到任何适用的方式来嘲笑它。它很难嘲笑这个类是密封的,我不能在它周围创建包装器。你有一些想法吗? 谢谢你的帮助
,
答案 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>();
}
}