我想知道在MSTest下的測試類中初始化實例變量的最佳做法是什麼。假設我有一個測試課,其中有很多開銷來嘲弄和設置支持對象。我只想做一次,而不是在每個測試中重複相同的代碼。我的想法是使用MyClassInitialize方法初始化所有測試可以訪問的全局實例變量。這樣,我一次初始化全局實例變量,並在每次測試運行時使用它們。MSTest,MyClassInitialize和實例變量
不幸的是,MyClassInitialize方法是靜態的,所以不能初始化全局實例變量。我想過讓全局實例變量是靜態的,但似乎並不是正確的解決方案。我接下來想到的只是將初始化代碼放入測試類本身的構造函數中,但我內心卻一直在說MyClassInitialize就是我應該使用的。另一個想法是使用MyTestInitialize,因爲該方法不是靜態的,但是這將在每次測試中反覆創建對象。這是否合適?
是否存在如何在測試中使用變量的最佳實踐,其中這些變量只需要在測試運行之前初始化一次?以下是我正在談論的一個人爲的例子。
[TestClass()]
public class ProgramTest
{
// this object requires extensive setup so would like to just do it once
private SomeObjectThatIsUsedByAllTestsAndNeedsInitialization myObject;
private TestContext testContextInstance;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// initializing SomeObjectThatIsUsedByAllTestsAndNeedsInitialization clearly will
// not work here because this method is static.
}
[TestMethod()]
public void Test1()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test2()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test3()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
}
無法真正量化我的靜態問題。它只是不「感覺」正確,但我無法解釋爲什麼。 – meyousikmann 2012-03-15 11:57:38
靜態意味着它由班級擁有。非靜態的東西由類的實例擁有。當試圖確定一件事是否應該是靜態的時,問問自己'這是整個班級擁有還是隻是一個實例? – Tristan 2014-10-03 04:16:30