Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何对调用具有外部依赖性的静态方法的方法进行单元测试?_C#_Unit Testing_Azure - Fatal编程技术网

C#如何对调用具有外部依赖性的静态方法的方法进行单元测试?

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

我有一个如下所示的方法,它使用NamaspaceManager类中的静态方法

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,这个解决方案对你有用吗?我的问题和你的一样。