在我看来是Microsoft.ServiceBus QueueClient
所以QueueClient
是抽象类,带有内部构造函数;我们调用QueueClient.CreateFromConnectionString(...)
来获取AMQP或SBMP具体的客户端类。这是获取QueueClient
实例的唯一方法。
我可以理解为什么他们使用这种模式,因为ConnectionString
指定了很多细节。
但是在单元测试中,这个QueueClient
很难模仿,(至少Moq不能这样做);即使使用Microsoft Fakes,ShimQueueClient
也只是您可以设置的一些方法的包装器,但您不能将其新建或作为参数下游传递。
我的问题是,当你决定出于某种原因使用这种模式时,你能做些什么来使它对测试更友好?
我能想到的东西就像你可以有一个静态方法允许你QueueClient.CreateForTest()
,但对此感到奇怪;或者让这个QueueClient.CreateFromConnectionString
取一个虚拟字符串(我已经通过给它一个非常短的'正确'字符串,以及在IntelliTrace中可以看到的一些捕获异常的成本)。
(注意:我并不是真的要求创建自己的IQueueClient
等。)
非常感谢。
冬
答案 0 :(得分:3)
我建议您创建一个基本界面来支持这种模式。具有内部构造函数的抽象类将实现此接口,使其对伪造,moqing和替换具有灵活性。
在Microsoft.ServiceBus QueueClient
的情况下,我会在生产代码中使用我自己的接口实现decorate,这样我就可以在单元测试中伪造装饰器。