Tôi tự hỏi thực hành tốt nhất là gì để khởi tạo các biến mẫu trong một lớp thử nghiệm dưới MSTest. Hãy nói rằng tôi có một lớp thử nghiệm, nơi có rất nhiều chi phí để chế nhạo và thiết lập các đối tượng hỗ trợ. Tôi chỉ muốn làm điều này một lần, thay vì lặp lại cùng một mã trong mỗi bài kiểm tra. Suy nghĩ của tôi là sử dụng phương thức MyClassInitialize để khởi tạo một số biến mẫu toàn cục mà tất cả các thử nghiệm đều có quyền truy cập. Bằng cách đó, tôi khởi tạo các biến cá thể toàn cục một lần và chúng chỉ được sử dụng bởi mỗi kiểm thử khi chúng chạy.MSTest, MyClassInitialize và các biến mẫu
Thật không may, phương pháp MyClassInitialize là tĩnh, vì vậy không thể khởi tạo biến mẫu toàn cục. Tôi nghĩ về việc biến các biến toàn cầu tĩnh, nhưng dường như không phải là giải pháp đúng. Tôi tiếp theo nghĩ về việc chỉ đặt mã khởi tạo trong một hàm tạo của lớp thử nghiệm, nhưng một cái gì đó bên trong tôi tiếp tục nói rằng MyClassInitialize là thứ mà tôi cho là đang sử dụng. Một suy nghĩ khác là sử dụng MyTestInitialize vì phương thức đó không tĩnh, nhưng điều đó sẽ tạo ra đối tượng lặp đi lặp lại với mỗi bài kiểm tra. Điều đó có phù hợp không?
Có các phương pháp hay nhất về cách sử dụng các biến trên các thử nghiệm trong đó các biến đó chỉ cần được khởi tạo một lần trước khi chạy thử nghiệm không? Dưới đây là một ví dụ giả tạo về những gì tôi đang nói đến.
[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
}
}
Không thể định lượng được vấn đề của tôi với tĩnh. Nó chỉ không "cảm thấy" đúng, nhưng tôi không thể giải thích tại sao. – meyousikmann
Tĩnh nghĩa là thuộc sở hữu của lớp. Những thứ không tĩnh được sở hữu bởi các thể hiện của lớp. Khi cố gắng xác định xem một thứ có nên tĩnh hay không, hãy tự hỏi 'Đây có phải là toàn bộ lớp học hay chỉ là một thể hiện?' – Tristan