ClassInitialize
được gọi một lần bởi MSTest trước khi bất kỳ số nào trong số TestMethod
được gọi, xem nhận xét here. TestInitialize
được gọi một lần trước mỗi phương pháp thử. MSTest tạo ra một thể hiện mới của lớp thử nghiệm cho mỗi cuộc gọi TestMethod
. Đây là lý do tại sao ClassInitialize
là một phương pháp tĩnh.
Tôi cần thực hiện một phương pháp (không tĩnh) trên lớp học. Tôi cũng cần phải thực hiện tất cả các phương thức thử nghiệm trong cùng một thể hiện của lớp.
Bạn có nghĩa là bạn cần thực thi một phương thức trên TestClass
hoặc lớp đang được kiểm tra (lớp bạn đang thực sự thử nghiệm)?
Trong cả hai trường hợp, bạn có thể có thành viên tĩnh trong TestClass
và khởi tạo nó một lần trong ClassInitialize
. Nó sẽ được tạo ra chỉ một lần và tồn tại trong suốt thời gian kiểm tra của bạn. Bạn chỉ có thể gọi một phương thức trên nó một lần. Sau đó, bạn có thể sử dụng cá thể đơn này trong mỗi phương pháp thử nghiệm của mình.
Một điều cần lưu ý là MSTest có thể xen kẽ các bài kiểm tra từ các lớp khác nhau. Vì vậy, nếu bạn có bất kỳ trạng thái có thể thay đổi toàn cục nào được truy cập từ nhiều hơn ClassInitialize
(hoặc kiểm tra cho vấn đề đó), những điều không thể đoán trước có thể xảy ra. Vì lý do đó, các thống kê tốt nhất nên tránh.
Yêu cầu tất cả các phương pháp phải được thực hiện trên cùng một trường hợp là khá bất thường. Có lẽ có một cách để cấu trúc lại mã của bạn để loại bỏ ràng buộc này?
Nguồn
2012-07-19 22:55:33
một số lý do bạn không thể chỉ gọi một cuộc gọi, sau đó gọi điện cho người khác? – Wug
Tất cả trong một thử nghiệm? Tôi có thể làm điều đó, nhưng tôi sẽ mất khả năng hiển thị ngay lập tức vào những thử nghiệm nào thất bại. Một thử nghiệm được gọi là "AllTests"? –