C#如何对调用具有外部依赖性的静态方法的方法进行单元测试?
我有一个如下所示的方法,它使用NamaspaceManager类中的静态方法C#如何对调用具有外部依赖性的静态方法的方法进行单元测试?,c#,unit-testing,azure,C#,Unit Testing,Azure,我有一个如下所示的方法,它使用NamaspaceManager类中的静态方法 public long GetCount(string name) { var namespaceManager = NamespaceManager.CreateFromConnectionString(this.queueConfig.ConnectionString); return namespaceManager.GetQueue(name).MessageCountDetails.Activ
public long GetCount(string name)
{
var namespaceManager = NamespaceManager.CreateFromConnectionString(this.queueConfig.ConnectionString);
return namespaceManager.GetQueue(name).MessageCountDetails.ActiveMessageCount;
}
由于函数对NamespaceManager类具有硬依赖性,因此在单元测试期间,它希望我提供一个有效的连接字符串。另外,我无法控制NuGet包附带的NamespaceManager类。如何重构它以使其可进行单元测试?我认为应该重构方法以接受NamespaceManager对象。然后,您可以在测试中创建NamespaceManager对象,将相关队列添加到该对象中,并将其传递到方法中 如果您想保持现有客户机代码不变,那么可以检查null并运行现有代码,例如
public long GetCount(string name, NamespaceManager namespaceManager = null)
{
if(namespaceManager == null)
{
namespaceManager = NamespaceManager.CreateFromConnectionString(this.queueConfig.ConnectionString);
}
return namespaceManager.GetQueue(name).MessageCountDetails.ActiveMessageCount;
}
但是NamespaceManager需要一个有效的队列连接字符串。我想包装NamespaceManager,但没有必要的控制。在每次单元测试运行期间,我必须保持一个队列,这是不可行的。啊,我明白你的问题了。那么我认为这个答案是你最好的选择。vrcks,这个解决方案对你有用吗?我的问题和你的一样。