2015-09-22 80 views
0

我們有一個由離岸外包開發公司開發的舊應用程序,它仍在使用Azure存儲客戶端1.7。Azure CloudBlobDirectory子目錄

因此,我在此版本停止工作之前更新它。

有一個單元測試,我不能通過。

[TestMethod()] 
    public void CloudBlobDirectoryTest() 
    { 
     CloudBlobClient cloudBlobClient = _cloudStorageAccount.CreateCloudBlobClient(); 
     string filePath = "http://127.0.0.1:10000/devstoreaccount1/store1/BCAUK_Reports.sql"; 
     string expected = "store1"; 
     CloudBlobDirectory actual = AzureUtil.CloudBlobDirectory(cloudBlobClient, filePath); 
     Assert.AreEqual(expected, actual.Container.Name); 
    } 

使用看起來像這樣的方法:

public static CloudBlobDirectory CloudBlobDirectory(CloudBlobClient cloudBlobClient, string filePath) 
    { 
     CloudBlobDirectory cloudBlobDirectory = cloudBlobClient.GetBlobDirectoryReference(filePath); 
     return cloudBlobDirectory; 
    } 

我已經重構這個以適應新的存儲API爲:

public static CloudBlobDirectory CloudBlobDirectory(CloudBlobClient cloudBlobClient, string filePath) 
    { 
     Uri path = new Uri(filePath); 
     string relativePath = "/store1/"; 

     CloudBlobContainer container = cloudBlobClient.GetContainerReference(path.Segments[1]); 
     CloudBlobDirectory cloudBlobDirectory = container.GetDirectoryReference(relativePath); 

     return cloudBlobDirectory; 
    } 

我不能鍛鍊什麼價值relativePath應該是,我將如何以可重現的方式得到這個值。

回答

3

這是一種奇怪的代碼片段。由於store1是一個容器,而BCAUK_Reports.sql是一個blob - 即沒有任何目錄,所以目錄的使用方式對我來說並不合適。此外,模擬器字符串的硬編碼看起來很奇怪,因爲這意味着這個測試不會測試任何相對於您大概正在使用的實時服務的任何內容。我猜這些古怪的是爲什麼這個移植不好。你能解釋一下你打算測試什麼嗎?

這就是說,如果我猜你想要做什麼它是獲得父目錄和容器的blob。如果您只需執行CloudBlockBlob(filepath,client.Credentials)之類的操作,然後對blob的容器引用執行blob.Container,或者對blob的父目錄執行blob.Parent。

+0

一致認爲它看起來很奇怪,不幸的是,它很少有關於它試圖實現什麼的文檔。看起來這將比我希望的更重寫。 – Fishcake

+0

@Fishcake有什麼我可以添加到我的答案來幫助你,或者這是你需要知道的幫助以上? –