2010-09-27 26 views
8

Tại sao có quá nhiều ghét phải xảy ra về 'chế nhạo từng phần' và mã yêu cầu nó?Giả lập một phần như Mã Mùi?

Dưới đây là một (lý thuyết) ví dụ thực hiện:

public ComplexResult1 operationA(Stimulus a) { 
    { 
     ... 
     result = ...; 
    } 
    auditTheChange(a); 
} 
public ComplexResult2 operationB(Stimulus b) { 
    { 
     ... 
     result = ...; 
    } 
    auditTheChange(b); 
    return result; 
} 
void auditTheChange(Stimulus stim) { 
    // do a bunch of stuff to record the change 
    // and interact with another outside service 
} 

Bây giờ, trong sự hiểu biết của tôi đây là cũng đang refactored.

Nếu tôi muốn thử nghiệm UNIT operationA và operationB, đảm bảo kiểm toán điều đó xảy ra trong mỗi kịch bản, nhưng không phải kiểm tra các chi tiết cụ thể của mã kiểm toán, tôi sẽ sử dụng một phần nhạo báng.

Tôi không thấy/hiểu được điều gì gây ra quá nhiều dự án (EasyMock, Mockito, v.v ...) để đề xuất tái cấu trúc?

+0

Ai là người đưa ra tuyên bố về chăn chống lại tất cả việc sử dụng một phần mocks? –

+0

Việc sử dụng từ "ghét" – skaffman

+0

@kirk, từ tài liệu EasyMock: "Trong trường hợp này, điều đầu tiên cần làm là xem xét việc tái cấu trúc vì phần lớn thời gian vấn đề này do thiết kế xấu gây ra. không phải là trường hợp hoặc nếu bạn không thể làm khác vì một số ràng buộc phát triển, đây là giải pháp. " – Nelz

Trả lời

4

Nếu kiểm toán thực sự là một hàm bên trong của lớp thì mã nên được kiểm tra như là một phần của phép thử đơn vị. Tại sao lớp của bạn xử lý cả hoạt động phức tạp và kiểm tra? Việc kiểm toán có thể được chuyển đến một lớp riêng biệt không?

Nếu có, hãy giới thiệu kiểm toán với tư cách cộng tác viên với lớp học này và giả lập. Nếu không, đơn vị kiểm tra nó.

Bạn có thể sử dụng một phần mocks, nhưng trong trường hợp này tôi nghĩ đó là dấu hiệu cho thấy lớp đang làm quá nhiều.

+0

Trường hợp sử dụng hợp lệ có thể là nếu tất cả các phương thức công cộng gọi một số loại dọn dẹp() ở cuối chúng. Trong trường hợp này, bạn có thể viết một bài kiểm tra đơn vị cho cleanUp(), chính nó. Sau đó, khi thử nghiệm tất cả các phương thức công khai, hãy sử dụng mô hình một phần để xác minh rằng cleanUp() được gọi là tránh cần phải xác minh chi tiết về những gì cleanUp() đã làm trong mọi phương thức công khai. –

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