2012-07-19 28 views
6

ClassInitialize dường như được gọi cho mọi bài kiểm tra. Tôi đoán đó là bởi vì một lớp học mới thực sự được tạo ra cho mọi bài kiểm tra.MSTest ClassInitialize một lần cho toàn bộ lớp học

Tại sao? Mỗi khung công tác khác không làm được điều này!

Dù sao ... 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.

Tôi có lên một con lạch không có mái chèo không?

+0

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

+1

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"? –

Trả lời

15

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?

Các vấn đề liên quan