2010-07-30 39 views
5

Tôi đang cố gắng để có được mocks làm việc, cho một sự thay đổi, và đã tự hỏi, nơi mọi người thường đặt các lớp giả của họ. Tôi dường như có ba lựa chọn cơ bản không có lựa chọn nào trong số đó có vẻ hiệu quả.Tôi nên đặt mocks của mình ở đâu?

Tôi có thể đưa chúng vào với bản thân ứng dụng, trong trường hợp chúng được gửi cùng với ứng dụng, có vẻ xấu, nhưng chúng có sẵn để kiểm thử đơn vị trong quá trình xây dựng cuối cùng và không có tham chiếu vòng tròn. Điều này có vẻ là cách tiếp cận đơn giản nhất.

Tôi có thể tạo một bản mô phỏng riêng biệt, vì vậy chúng có sẵn trong các bài kiểm tra đơn vị, có thể được sử dụng từ ứng dụng và ứng dụng thử nghiệm, nhưng cuối cùng tôi phải di chuyển tất cả các loại thực tế đến hội đồng này hoặc tạo tham chiếu vòng tròn.

Tôi có thể đặt chúng trong nhóm thử nghiệm, nhưng sau đó chúng không thể được sử dụng từ chính ứng dụng và do đó tôi không thể sử dụng chúng như là một quá trình để xây dựng các phần của ứng dụng.

Tôi có xu hướng thử và sử dụng các mocks để giúp phát triển hệ thống cũng như cho các bộ phận thử nghiệm và do đó tôi thấy khó để biết vị trí đặt chúng. Ngoài ra tất cả các bản phát hành cuối cùng của mã phải chạy qua các quá trình thử nghiệm đơn vị do đó tôi cần các mocks có sẵn trong chu kỳ xây dựng.

Có ai có bất kỳ suy nghĩ nào về nơi đặt các lớp mô phỏng không?

nhờ sự giúp đỡ nào T

+0

Nhìn vào thuộc tính assembly 'InternalsVisibleTo'; nó sẽ cải thiện các tùy chọn của bạn: http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx – Flynn1179

+0

"Tôi có xu hướng thử và sử dụng các mocks để giúp phát triển hệ thống" - điều này có vẻ kỳ quặc. Chắc chắn một lớp nhất định là một phần của ứng dụng, hoặc một phần của các bài kiểm tra; nhưng không phải cả hai. –

+0

@Flynn Tôi đã sử dụng cảm ơn đó. @Tim - Có lẽ đây là nơi tôi đang đi sai. Nó chỉ có vẻ là một sự xấu hổ rất lớn để luôn luôn phải nói chuyện tất cả các cách trở lại thông qua nhiều lớp để phát triển hệ thống của tôi khi tôi có những mocks tuyệt vời chỉ cần chờ đợi để được sử dụng. Bạn có thấy tất cả các lớp của hệ thống của bạn đã được mã hóa trước khi bạn làm việc trên giao diện người dùng không? – Tollo

Trả lời

10

mocks của bạn nên đi vào các dự án kiểm tra đơn vị của bạn. Ứng dụng của bạn không nên phụ thuộc vào các đối tượng giả của bạn. Nói chung, ứng dụng của bạn sẽ sử dụng các giao diện và mocks của bạn sẽ thực hiện các giao diện đó. Ứng dụng của bạn sẽ không cần hoặc nên tham khảo dự án thử nghiệm của bạn.

+1

Vì vậy, bạn sẽ không bao giờ sử dụng mocks của mình để tăng tốc và làm việc với ứng dụng của bạn? Tôi bắt đầu có chúng trong dự án thử nghiệm đơn vị nhưng nó có vẻ là một sự lãng phí rất lớn nếu ứng dụng của tôi luôn phải nói chuyện về phía sau của tôi trong khi tôi có tất cả những chiếc mocks hoạt động hoàn hảo ở đó. – Tollo

+0

"Vì vậy, bạn sẽ không bao giờ sử dụng mocks của bạn để tăng tốc độ và làm việc với các ứng dụng của bạn?" Không; giữ mã kiểm tra trong ứng dụng. Ngoài mocks, bạn đã có mã kiểm tra đơn vị quá: là khóc ra để được sử dụng? –

+0

Xin lỗi vì sự lừa đảo giữa hai ý kiến, nhưng ... Sự khác biệt chính giữa mã kiểm tra đơn vị và mocks là giao diện người dùng của tôi cần sử dụng một số dạng dịch vụ và lớp cuối cùng trước khi các lớp khác của các nhà phát triển có hoàn thành mã hóa. Tôi đã có một bộ đáng yêu của mocks cho điều này trong dự án thử nghiệm của tôi nó chỉ có vẻ là một sự xấu hổ lớn không để có thể sử dụng chúng. Bạn có tìm thấy tất cả các lớp bên dưới bạn đã được mã hóa trước khi bạn làm việc trên giao diện người dùng không? – Tollo

0

Những gì chúng tôi làm trong các dự án của chúng tôi là xác định nội bộphụ thuộc bên ngoài phụ thuộc. Mocks cho các phụ thuộc nội bộ đi vào dự án thử nghiệm đơn vị (hoặc một dự án Mocks riêng biệt nếu chúng được sử dụng trên toàn bộ giải pháp). Mocks cho các phụ thuộc bên ngoài đi vào chính ứng dụng và sau đó được sử dụng để thử nghiệm triển khai và tích hợp.

Một phụ thuộc bên ngoài là thứ gì đó có môi trường - vì vậy, Active Directory, dịch vụ web, cơ sở dữ liệu, trình ghi nhật ký, loại điều đó. Dependency injection được xử lý theo cách tương tự - các phụ thuộc bên ngoài được định nghĩa trong một tệp cấu hình, vì vậy chúng ta có thể dễ dàng chọn chúng ta muốn sử dụng vào thời gian chạy.

Một phụ thuộc nội bộ là khá nhiều thứ khác.

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