2009-01-27 35 views
12

Giả sử Visual Studio.NET 2008 và MsTest được sử dụng để chạy thử nghiệm đơn vị. Khi một hệ thống dựa trên một container dịch vụ và thử nghiệm đơn vị tiêm phụ thuộc sẽ tự nhiên yêu cầu thiết lập các dịch vụ.Sử dụng một lớp cơ sở để thiết lập thử nghiệm đơn vị và teardown

Các dịch vụ này có nên được thiết lập trong một lớp cơ sở mà tất cả các bài kiểm tra đơn vị lấy được từ hoặc trong mỗi lớp kiểm tra đơn vị. Nếu họ phải ở trong một lớp cơ sở, có cách nào để có các phương thức TestInitializeClassInitialize được thực hiện mà không yêu cầu chúng được gọi từ lớp dẫn xuất, ví dụ: base.Initialise?

Trả lời

8

Khung MSTest sẽ tìm kiếm toàn bộ đối tượng (tất cả các lớp cơ sở) cho các phương pháp được đánh dấu Test*. Giống như khi bạn khai báo chúng trên lớp kiểm tra đơn vị, bạn không phải gọi chúng một cách rõ ràng.

+2

Các phương thức lớp * sẽ luôn được đánh dấu là tĩnh và do đó sẽ không được gọi từ các lớp dẫn xuất. Các phương thức Test * sẽ được gọi vì chúng là các phương thức cá thể. – sduplooy

+0

Bạn nói đúng, đã sửa câu trả lời. –

0

Tôi thích các phương pháp đánh dấu đơn vị thực tế là Test*Class* được đánh dấu. Nếu bạn định nghĩa chúng trên một lớp cơ sở, bạn không thể thêm các hoạt động thử nghiệm cụ thể cho chúng. Thay vào đó, hãy sử dụng các hàm tạo static và instance và finalizer trên lớp cơ sở của bạn.

5

Với năm 2008, bạn sẽ có thể có [TestInitialize] trên một lớp cơ sở, và miễn là bạn không thêm [TestInitialize] khác ở đâu đó trong cấu trúc phân cấp, nó sẽ được gọi. Bạn cũng có thể làm những việc với các phương pháp ảo.

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