我正在使用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的例子吗?
由于