[C#.NET] 單元測試專案 夾帶 測試檔案

[C#.NET] 單元測試專案 夾帶 測試檔案

我們可能會為我們的測試添加一些測試檔案,然而這些測試檔案最好是附加在測試專案裡。

image

 

當我把檔案附加在測試專案裡,對測試方法按下"測試"後,

image

 

測試的結果輸出應該是要在 .\TestResults\"測試時間"\Out 資料夾裡,"測試時間"是一個變動的資料夾目錄。

image

 

以測試程式碼為例,這只會在測試輸出資料夾產生 tempFolder 資料夾,temp.txt.zip及7z.dll相關檔案都沒有出現,而造成測試失敗

/// <summary>
///A test for Decompression
///</summary>
[TestMethod()]
public void 解壓縮測試_到目錄()
{
    string folder = "tempFolder";
    Assert.IsFalse(Directory.Exists(folder), "'tmp'-Directory already present when starting the unit test!");
    Directory.CreateDirectory(folder);

    SevenZipFactory target = new SevenZipFactory();
    string SourceFileName = "temp.txt.zip";
    string TargetDirectory = folder; // TODO: Initialize to an appropriate value
    target.DecompressionToFolder(SourceFileName, TargetDirectory);
    var files = Directory.GetFiles(folder);
    Assert.AreEqual(files.Length, 1);
}

 

我們得發佈測試檔案才行!!!

首先先確認測試設定裡的Enable deployment有勾選,若你想要讓每個測試方法都發佈相同的檔案,你可直接在這理加入檔案或資料夾。

image

 

設定檔裡便可看到Xml DeploymentItem 結構屬性有我們定義的檔案出現

image

 

 

若你想指定某些特定檔案在特定測試方式理出現,我們只需要在測試方法裡定義 DeploymentItem Attribute

/// <summary>
///A test for Decompression
///</summary>
[DeploymentItem("temp.txt.zip"), TestMethod()]
public void 解壓縮測試_到目錄()
{
    string folder = "tempFolder";
    Assert.IsFalse(Directory.Exists(folder), "'tmp'-Directory already present when starting the unit test!");
    Directory.CreateDirectory(folder);

    SevenZipFactory target = new SevenZipFactory();
    string SourceFileName = "temp.txt.zip";
    string TargetDirectory = folder; // TODO: Initialize to an appropriate value
    target.DecompressionToFolder(SourceFileName, TargetDirectory);
    var files = Directory.GetFiles(folder);
    Assert.AreEqual(files.Length, 1);
}

 

 

 

 

 

 

再來,確認檔案輸出方式為"Copy always"

image

 

同理,若想要為測試類別發佈檔案,也是定義DeploymentItem Attribute

image

 

 

如此一來,我們便可在測試輸出資料夾看到測試檔案發佈成功了。

image

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo