我有一些測試代碼似乎用完了正確的順序。測試訂單Microsoft.VisualStudio.TestTools.UnitTesting問題?
[TestClass]
public class DirTest {
public DirTest() {
Assert.AreEqual(Directory.Exists("testpath"), true);
}
[TestMethod]
public void TestMethod1() {
}
[ClassInitialize]
public static void InitTest(TestContext context) {
Directory.CreateDirectory("testpath");
}
}
它拋出該目錄不存在,類構造函數被調用或者是有什麼我需要做的是缺少前不應ClassInitialize運行錯誤。如果情況並非如此,除了AssemblyInitialize之外,還有一個測試用例可以包含在構造類之前調用的測試中嗎?
- 編輯 真正的問題在這裏,頂部是一個簡化。
//RealClass.cs
public class RealClass{
public RealClass(string path){
this._path = path;
this._InitDirectory();
}
protected string _path;
protected void _InitDirectory(){
//Something that requires read from path
File.WriteAllText(this._path + "/realData.data", "some real data that needs to be created by the class");
}
}
//DirTest.cs
[TestClass]
public class DirTest : RealClass {
public DirTest() : base("testpath") {}
[TestMethod]
public void TestMethod1() {
}
[ClassInitialize]
public static void InitTest(TestContext context) {
Directory.CreateDirectory("testpath");
}
}
單元測試將失敗,因爲其中需要的路徑「ClassInitialize」方法之前將死的目錄被調用來創建所需的模擬目錄。
- 編輯
我想出了一個變通對於這一點,但我仍想知道是否有另一種方式來達到預期的效果而無需添加更多的類,並且不移除的功能考試。我爲剛剛包含該靜態方法的類設置了一個「AssemblyInitialize」,並告訴該方法爲「ClassInitialize」激發靜態方法。它當然會在任何構造函數之前觸發。雖然問題的根源仍然沒有解決,因爲它不是自包含的,而是依賴於類函數來調用類設置。
你真的有相對路徑還是隻顯示它的樣本? (事實上,創建文件夾對於單元測試來說不是個好主意,但它不是這個問題的一部分)。 –
構造函數總是首先執行。 –
這個想法是以一種簡單的方式顯示,如果我要在構造類之前測試具有需要某些東西的繼承的類,它將無法創建該類。如果你的課堂需要文件夾進行測試,那麼不是測試創建和銷燬它們以進行測試並不是一個壞主意,你還有什麼能夠分享你的測試?我明白,當一個類正在創建構造函數總是被稱爲第一,但這是一個靜態方法。如果這個想法要求建造這個班,爲什麼會是靜態的? – Stev0