2017-07-10 33 views
0

我有一個方法如下,使用NamaspaceManager類的靜態方法。C#如何單元測試調用具有外部依賴性的靜態方法的方法?

public long GetCount(string name) 
{ 
    var namespaceManager = NamespaceManager.CreateFromConnectionString(this.queueConfig.ConnectionString); 
    return namespaceManager.GetQueue(name).MessageCountDetails.ActiveMessageCount; 
} 

由於該函數對NamespaceManager類有很強的依賴性,因此在單元測試期間,它期望我提供一個有效的連接字符串。此外,我沒有任何控制NamespaceManager類,因爲它帶有NuGet包。我如何重構它以使其可以單元測試?

回答

1

我認爲你應該重構你的方法來接受一個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; 
} 
+0

但NamespaceManager需要一個有效的連接字符串到隊列。我想包裝NamespaceManager但沒有必要的控制。我將不得不在每個單元測試運行期間保持一個隊列,這是不可行的。 – vmn

+1

啊,我看到你的問題。那麼我認爲這個答案是你最好的選擇。 https://stackoverflow.com/a/40723011/845655 – DeanOC

相關問題