2009-03-16 34 views
5

Tôi đang cố gắng để Giả lập IUnityContainer bằng cách sử dụng Moq 3.0Làm thế nào để bạn Mock IUnityContainer?

Tôi nhận được một BadImageFormatException, nhưng không phải khi gỡ lỗi. Từ vẻ ngoài của nó, tôi không phải là người duy nhất chạy vào vấn đề này.

here

Và một vấn đề đăng ký của mình cho Moq

here

Tôi chỉ tò mò nếu có ai đã tìm thấy một giải pháp ... gần nhất tôi đã tìm thấy là một giải pháp tốt đẹp mà sử dụng RhinoMock bởi Roy Osherove

here

nhưng tôi thực sự thích Moq! Vì vậy, tôi không thực sự muốn phải chuyển sang Rhino Mock nhưng tôi sẽ nếu tôi phải

Cảm ơn trước!

+0

Tôi gặp sự cố tương tự. Xin vui lòng cho tôi biết, nếu bạn tìm thấy một giải pháp cho việc này. – toxvaerd

+0

Vì vậy, vẫn chưa có giải pháp nào? Tôi đã gặp phải vấn đề tương tự với 3.1 Moq trên 3.5sp1. – Shrike

Trả lời

4

Bạn không.

Lý do duy nhất để thử vùng chứa là nếu bạn đang chuyển vùng chứa đó. Đó là một mô hình chống.

Thay vào đó bạn muốn soạn toàn bộ biểu đồ đối tượng tại điểm vào của ứng dụng hoặc Composition Root.

Nếu bạn cần tạo phiên bản khi đang bay, hãy sử dụng Automatic Factories.

Để thử nghiệm, bạn có thể xây dựng đối tượng đang thử nghiệm và chuyển đối tượng giả cho hàm tạo hoặc tạo vùng chứa mới trong thử nghiệm và đăng ký đối tượng giả với nó.

+1

Đồng ý, làm cho câu hỏi này khi tôi còn trẻ và nieve ... Tôi cũng đã sử dụng IoC container sai. –

1

Bạn có cần một đối tượng giả đầy đủ không? Bạn có thể nhận được bằng cách chỉ cần thực hiện một Fake? Tức là, thực hiện một sự thử nghiệm của giao diện IUnityContainer và ghi đè phương thức mà bạn cần tương tác với?

Tôi đã rơi vào bẫy nhiều hơn một lần trong suy nghĩ rằng vì tôi có một thư viện đối tượng giả, tôi nên sử dụng nó để cô lập mọi phụ thuộc trong hệ thống của tôi. Thường xuyên hơn không, làm một cái gì đó đơn giản hơn cho tôi những kết quả tôi muốn với mức độ thất vọng thấp hơn nhiều.

+0

Tại sao bình luận này lại bị bỏ phiếu? Những người xuống bình chọn xin chăm sóc để lại một lưu ý để những người khác theo dõi sẽ có thể học tốt hơn từ SO. – Raj

+0

Thật vậy. Tôi upvoted bồi thường. Việc tạo một cuống sẽ giải quyết vấn đề bằng cách tránh hoàn toàn vấn đề (không cần sử dụng Moq). Đó là giải pháp hợp pháp và đối với những người bỏ phiếu này, tôi khuyến khích bạn chia sẻ lý do tại sao cho phần còn lại của lớp học. –

+0

Có thể Stackoverflowers không thích những người có chứng chỉ? :) –

0

Vì vấn đề này tôi không chế IUnityContainer, tôi sử dụng một ví dụ thực tế của UnityContainer để thay thế. Nó không phải là lý tưởng nhưng tôi có thể kiểm tra đăng ký bằng cách kiểm tra xem container có thể giải quyết các loại thích hợp hay không.

Bạn có thể thử và sử dụng IServiceLocator khi bạn đang sử dụng nó để giải quyết các loại trong lớp học hoặc thậm chí tốt hơn, sử dụng đăng ký nhà máy với vùng chứa và sử dụng thay thế.

1

Bạn đã thử chế nhạo UnityBaseContainer hoặc UnityContainer thay vì IUnityContainer, ala this post bởi Rory Primrose? Ông đang đối phó với RhinoMocks nhưng bởi vì tôi nghĩ rằng vấn đề có liên quan đến việc sử dụng nội bộ của Moq Castle, bạn có thể giải quyết vấn đề theo cách này.

0

Bạn có đang chạy ứng dụng này trên Win x64 không? Hãy xem điều này page. Nó cho thấy rõ ràng.

ngoại lệ này được ném khi định dạng tập tin của thư viện năng động liên kết (.dll tập tin) hoặc thực thi (tập tin .exe) không phù hợp với các định dạng được mong đợi bởi thời gian chạy ngôn ngữ chung.

Ngoài ra, tìm thấy mục nhập blog này cho thấy việc thay đổi cờ biên soạn từ CPU bất kỳ thành x86 có thể giúp nguyên nhân. http://filips.net/archives/2008/01/17/getting-badimageformatexception-in-64-bit-windows/

Edit:

Cũng có một cái nhìn tại this thread SO. Có một cái nhìn trong Trình quản lý cấu hình xây dựng của bạn.

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