簡體   English   中英

在 MSTest 中每個測試用例之后清除所有 static 數據

[英]Clear all static data after each test case in MSTest

我想用 MSTest 為我的庫編寫測試。 TestCase1 運行后,它會做一些事情,設置 MyData(我的庫內部類的私有 static 字段),如:

internal MyClass{private static int MyData;}

當 TestCase2 運行時,它將重新使用該數據。

我已經編寫了一個 Reset 方法並在 TestInitialize 方法內容中調用它,例如:

var type = MyAssembly.GetType("MyClass");
var privateType = new PrivateType(type);
privateType.SetStaticField("MyData", 0);

如您所見,該方法會將 static 字段重置為 0,但它需要知道屬性名稱和 class(“MyClass”和“MyData”)。

現在,我用我的混淆 dll 進行測試,測試將失敗,因為名稱將被更改。 此外,在我的庫中,我引用了第三方庫,它也可以將數據存儲在 static 字段中。 它將使TestCase2 重用由TestCase1 設置的數據,而TestCase2 將始終失敗。

如何在 TestInitialize 中重置所有 static 字段?

** 更新:

我可以看到一個解決方案,我可以在單獨的 AppDomain 上運行每個測試用例,它可能會變慢,但我可以嘗試。 問題是我不知道如何在單獨的 AppDomain 中正確運行每個測試用例?

經過幾天閱讀文檔和示例后,我發現沒有更好的解決方案。 我和一些同事討論過,我認為這應該是我測試庫設計的問題,而不是我的測試設計問題。

將數據保存在庫 static 字段中並更改它將使該數據與正在運行的進程或實例保持耦合。 在現實生活中,如果用戶運行 2 個(或更多)使用該庫的應用程序的進程(實例),那么 static 數據將很容易以不可預知的方式更改,並帶來巨大的災難。 因此,通過清除 static 數據來解決我的測試問題只是一個“讓代碼運行”的技巧,而這個棘手的解決方案將真正的問題隱藏在代碼中——更危險。

將數據保存在 static 字段中確實是個壞主意 如果該數據不是 STATIC,請不要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM