代码之家  ›  专栏  ›  技术社区  ›  dot

如何伪造/单元测试Azure存储队列?

  •  0
  • dot  · 技术社区  · 3 年前

    我试图找到一种方法来测试我拥有的一些查询azure存储队列的代码。目前,我被要求创建自己的本地内存队列类,以模拟上游Azure队列。 此时,我试图看看我是否可以在一个假队列中创建一个示例消息,这样我的类的被调用者就有一些数据可以使用。

    所以我试着做这样的事情:

    using Azure.Storage.Queues.Models;
    namespace Widgets.Tests.Queues
    {
        public class InMemoryAzureMessageQueue : IAzureQueueClient
        {
            public string DequeueMessage(QueueMessage message)
            {
                throw new System.NotImplementedException();
            }
    
            public QueueMessage[] GetMessages()
            {
               //pseudocode
               QueueMessage qm = new QueueMessage();
               QueueMessage[] listqm = new QueueMessage[];
               qm.messageID = xxx;
               qm.messageBody = "hello";
    
               listqm.add(qm);
               return listqm;
    
            }
    
            public bool HasMesssages()
            {
                return true; 
            }
        }
     }
    

    当我尝试创建“qm”时,我收到以下错误消息: “QueueMessage”不包含接受0个参数的构造函数

    到目前为止我所尝试的:

    我试图在单击QueueMessage时“转到定义”,只是为了看看构造函数是什么样子。但当我这样做时,我收到一个错误,说没有找到定义。

    该类的描述如下:

    The object returned in the QueueMessageList array when calling Get Messages on a Queue.
    

    也许我不能创建这样的消息?

    我真的很生疏。NET和一切Azure。 任何提示都将不胜感激。

    0 回复  |  直到 3 年前
        1
  •  2
  •   devNull    3 年前

    这个 QueueMessage 类不包含可访问的构造函数。但是,您可以使用 QueuesModelFactory ,其设计用于模拟这些消息:

    public QueueMessage[] GetMessages()
    {
        QueueMessage qm = QueuesModelFactory.QueueMessage(
            messageId: "xxx",
            popReceipt: "",
            messageText: "hello",
            dequeueCount: 0);
        QueueMessage[] listqm = new QueueMessage[1];
    
        listqm[0] = qm;
        return listqm;
    }