2009-06-29 54 views
5

Tôi đang cố gắng thay đổi thử nghiệm đơn vị của mình về ArcGIS và bắt đầu sử dụng mocks (tôi sử dụng tê giác).
Khi tôi bắt đầu viết các bài kiểm tra, tôi nhận thấy mình phải bắt đầu chế nhạo rất nhiều đồ vật và đưa ra rất nhiều phương pháp ngay cả một bài kiểm tra duy nhất để vượt qua.
Ví dụ - điều khiển của tôi đầu tiên được một RelationshipClass (vì vậy tôi cần phải còn sơ khai các IWorkspace và trở IRelationshipClass), sau đó cũng được một IFeature (A còn sơ khai), và cuối cùng gọi stubRelClass.GetRelatedObjects(stubFeature), để trả lại một ISet của IFeatures khác.mùi thử nghiệm đơn vị

Có bình thường khi phải cạy rất nhiều đồ vật và phương pháp để vượt qua? Tôi cũng cảm thấy như tôi thực sự cần phải bước qua mã (vâng - tôi biết tôi nên viết các bài kiểm tra đầu tiên, tôi vẫn đang cố gắng), để tìm ra những gì để tiếp tục, và những gì tôi nên quay trở lại .

Tôi cũng gặp sự cố với các lớp chế nhạo com thực hiện nhiều giao diện. Trong mã sản xuất tôi QI chúng giữa các giao diện. Làm thế nào tôi có thể tạo một mô hình thực hiện cả hai giao diện tại thời gian chạy?

Trả lời

3

Tùy thuộc vào chuỗi tiêm của bạn, có, đôi khi bạn phải chế nhạo rất nhiều đối tượng. Nếu bạn đang đi nhiều cấp độ sâu mặc dù, nó có thể là dấu hiệu của một lỗi thiết kế - các đối tượng đang dựa vào dữ liệu đó là ba lớp xuống vào API của bạn có thể không được lỏng lẻo cùng. Bạn sẽ có thể nip chuỗi trong chồi bằng cách chỉ trả về một đối tượng giả của một số loại tại một số điểm mà có các thuộc tính cần thiết mà lớp bạn đang thử nghiệm theo nhu cầu.

Bạn cũng có thể thực hiện hầu hết các chế nhạo của mình theo phương thức [SetUp] và sau đó có mỗi thử nghiệm chỉ thay đổi một hoặc hai thứ.

Để mô phỏng nhiều giao diện, Rhino có khái niệm về một MultiMock. Tôi tin rằng cú pháp bạn đang sau là:

var mock = 
    MockRepository.DynamicMultiMock<MyType>(
       typeof(Interface1), 
       typeof(Interface2), 
       ....); 
+0

Về giới thiệu một đối tượng mà cắt giảm các mức sâu - nó sẽ "cứu" tôi khỏi chế giễu một số đối tượng trở lên (kể từ khi một đối tượng này sẽ trang trải cho họ), nhưng tôi vẫn sẽ cần phải thử về cùng một số phương pháp, phải không? Hoặc tôi nhận được điều này sai? –

+0

Vấn đề không phải là "cứu bạn" khỏi chế nhạo nhiều đồ vật hơn. Vấn đề là thử nghiệm đang cố gắng nói với bạn rằng có một khái niệm bị thiếu trong đó, đó là lý do tại sao nó quá phức tạp. –

2

Đối với tôi nó có vẻ như mã untestable, mà là một mùi :-(

tôi sẽ khuyên bạn nên đọc http://misko.hevery.com/code-reviewers-guide/ Tác giả là HLV chịu trách nhiệm giảng dạy google. Trong bài viết, ông cho thấy làm thế nào bạn có thể viết mã có thể kiểm tra và không thể kiểm chứng được

Đọc thêm: Mã sạch (Robert C. Martin) - tập trung chính vào cách viết sạch (tương ứng với kiểm chứng)) Mã số Làm việc hiệu quả với mã cũ (Michael Feather) - cho thấy cách để có được mã chưa được kiểm tra và không thể kiểm soát được kiểm soát.

+0

và nếu bạn không nhớ một thời gian nghỉ thương mại ngắn ... http://www.mockobjects.com/book –

3

Nó có thể là một dấu hiệu của khớp nối cao - điều này cho thấy cần phải giảm phụ thuộc (sẽ cải thiện thiết kế và khả năng thử nghiệm). Như một hướng dẫn sơ bộ, một đối tượng nên có khoảng 4-6 cộng tác viên tối đa. Bất cứ điều gì trên đó sẽ tắt báo thức của tôi.

How are Mocks meant to be used?