简体   繁体   English

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

[英]how to fake / unit test Azure Storage Queue?

I am trying to find a way to test some code I have that will query an azure storage queue.我正在尝试找到一种方法来测试我拥有的一些代码,这些代码将查询 azure 存储队列。 For now, I have been asked to create my own local in memory queue class that simulates the upstream Azure queue.目前,我被要求在 memory 队列 class 中创建自己的本地,该队列模拟上游 Azure 队列。 At this point, I'm trying to see if I can create a sample message in a fake queue so the callee of my class has some data to work with.此时,我正在尝试查看是否可以在假队列中创建示例消息,以便我的 class 的被调用者有一些数据可以使用。

So I'm trying to do something like this:所以我正在尝试做这样的事情:

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; 
        }
    }
 }

When I try to create "qm" I'm getting the following error message: 'QueueMessage' does not contain a constructor that takes 0 arguments当我尝试创建“qm”时,我收到以下错误消息:“QueueMessage”不包含采用 0 arguments 的构造函数

What I've Tried So Far:到目前为止我尝试过的:

I have tried to "go to defintion" while clicking on QueueMessage just to see what the constructor looks like.我在单击 QueueMessage 时尝试“转到定义”,只是为了查看构造函数的外观。 But when I do, I get an error saying that there is no definition found.但是当我这样做时,我得到一个错误,说没有找到定义。

The description of the class says this: class 的描述是这样说的:

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

Maybe I can't just create a message like this?也许我不能只创建这样的消息?

I'm really green at .NET and all things Azure.我在 .NET 和 Azure 的所有事情上真的很绿色。 Any tips would be appreciated.任何提示将不胜感激。

The QueueMessage class does not contain an accessible constructor. QueueMessage class 不包含可访问的构造函数。 You can however build a message using the QueuesModelFactory , which was designed for mocking these messages:但是,您可以使用为QueuesModelFactory这些消息设计的 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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM