2011-05-05 61 views
4

考慮下面的測試類:如何在單元測試中刪除陳舊的DeploymentItems?

[TestClass] 
public class ExampleTests 
{ 
    [TestMethod] 
    public void FileDoesNotExists() 
    { 
     Assert.IsFalse(System.IO.File.Exists("testfile.txt")); 
    } 

    [TestMethod] 
    [DeploymentItem("testfile.txt")] 
    public void FileExists() 
    { 
     Assert.IsTrue(System.IO.File.Exists("testfile.txt")); 
    } 

} 

根據在這些測試的運行,他們威力通不過的順序,因爲沒有保證,他們將在順序運行它們被定義的真實世界行爲是非確定性的......顯然這是不好的。

我看了看周圍,並試驗了TestCleanupAttribute,但一直沒有找到一個可靠的方式來讓兩個測試通過,但它似乎應該有一個簡單的方法來做到這一點。這種方法是否存在?

更新:這似乎是不可能的,因爲測試框架假定DeploymentItems在部署後不會更改,因此僅部署一次每個項目。在短期內,我改變了測試中的代碼,不再需要這種行爲,長期來看,我很可能會實現一個不做此假設的屬性。

回答

2

DeploymentItem s實際上是您通常會部署到客戶端計算機的文件,所以在部署它們之後,您無意將其刪除

你應該爲你的單元測試創​​建一個'Sandbox'目錄,並使用像File.Delete這樣的普通.NET文件系統方法來完成你的文件複製/訪問/刪除操作。

+0

我試圖測試的行爲是當(預期但不是嚴格需要的)配置文件丟失時的行爲,但是這種行爲在同一項目的不同版本需要針對不同測試部署的情況下也是有問題的。沙箱目錄似乎可行,但並不理想,因爲它增加了每次測試所需的鍋爐代碼量。 – Yaur 2011-05-18 15:00:34

+0

我有時把這種重複的文件訪問代碼卸載到靜態類的靜態類中。我找不到解決這個問題的方法,但是使用mstest butUnit.net似乎有一個有趣的界面。即IUseFixture ,您可以在其中爲該類定義DeploymentFixture,並在每次測試之前運行適當的方法。 – 2011-05-18 15:10:26

相關問題