尝试在单元测试中使用Shim for Microsoft.ServiceBus.Messaging.QueueClient时出错

时间:2015-02-13 19:16:45

标签: c# unit-testing servicebus shim

我正在使用QueueClient通过基于msdn上的一些示例的代码在Azure Service Bus上发送消息:

我实际上有QueueClient的工作代码,但我想做一些单元测试。这就是问题开始的地方。我在填补微软课程方面遇到了问题。

我的代码将接受QueueClient并使用它来发送消息。我为该代码创建单元测试的第一步是尝试创建并测试QueueClient的垫片。我绕过了Send(BrokeredMessage)方法,在垫片上调用了该方法,以及断言我的绕道被调用了。

涉及到一些小问题 - QueueClient是抽象的,并没有实现任何接口。我必须创建一个实例来使用带有伪路径的create方法来填充。我不知道在运行测试时是否会出现问题。

我最终得到了以下测试:

using Microsoft.QualityTools.Testing.Fakes;
using Microsoft.ServiceBus.Messaging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

... [some context removed]

        [TestMethod]
    public void TestFireAndForgetHappyPath2()
    {
        using (ShimsContext.Create())
        {
            const string messageBody = "Hi";
            string capturedBody = null;

            var shimmedClient = QueueClient.CreateFromConnectionString("Endpoint=sb://fake.net/;", "queueName");

            var shim = new Microsoft.ServiceBus.Messaging.Fakes.ShimQueueClient(shimmedClient)
            {
                SendBrokeredMessage = message => { capturedBody = message.GetBody<string>(); }
            };

            shim.SendBrokeredMessage(new BrokeredMessage(messageBody));
            Assert.AreEqual(messageBody, capturedBody);
        }
    }

我在Visual Studio中创建了代码。它没有在编辑器中抱怨(即没有红色波形),但是当我尝试构建时,我收到以下错误:

  

属性或索引器   'Microsoft.ServiceBus.Messaging.Fakes.ShimQueueClient.SendBrokeredMessage'不能在此上下文中使用,因为它缺少get访问器

我在微软的Shim文档中查找了示例。他们甚至有一个与服务总线相关的示例,但他们不使用QueueClient。相反,他们使用我在MSDN中找不到的类和接口(参见https://msdn.microsoft.com/en-us/library/azure/hh873028.aspx及其对IMicrosoftAzureQueue的使用)。

有人可以提供一些关于如何正确存根/模拟/填充QueueClient的例子吗?

由于

0 个答案:

没有答案