【发布时间】:2014-04-25 10:13:01
【问题描述】:
在我心中是Microsoft.ServiceBus QueueClient
所以QueueClient 是抽象类,带有一个内部构造函数;我们调用QueueClient.CreateFromConnectionString(...) 来获取AMQP 或SBMP 具体客户端类。这是获取QueueClient 实例的唯一方法。
鉴于ConnectionString 指定了很多细节,我可以理解他们为什么使用这种模式。
但是在单元测试下,这个QueueClient很难mock,(至少Moq做不到);即使使用 Microsoft Fakes,ShimQueueClient 也只是一个包装器,其中包含一些您可以设置的方法,但您不能新建它或将其作为参数传递给下游。
我的问题是,当您出于某种原因决定使用这种 Pattern 时,您可以做些什么来使其对测试更友好?
我能想到的东西,比如你可以有一个静态方法让你QueueClient.CreateForTest(),但对此感到很奇怪;或者将这个QueueClient.CreateFromConnectionString 设置为虚拟字符串(我已经通过给它一个非常短的“正确”字符串来做到这一点,你可以在 IntelliTrace 中看到一些捕获的异常的成本)。
(注意:我并不是真的要求创建自己的IQueueClient 等)
非常感谢。
董
【问题讨论】:
标签: c# unit-testing abstract-class factory-pattern internal