2010-07-11 35 views
5

Tôi đang cố gắng thực hiện TDD với đối tượng có phụ thuộc vào Giao diện COM. Tôi mặc dù về chế giễu giao diện COM, trong khi làm thử nghiệm phát triển, và thực hiện nó trên các bài kiểm tra tích hợp.Cách kiểm tra đối tượng phụ thuộc COM trong C#

Tuy nhiên, tôi không thể thử giao diện COM, tôi đã cố gắng với Moq, và nó ném một ngoại lệ:

System.TypeLoadException là unhandled bởi mã người dùng nhắn = Không thể tải kiểu 'Castle.Proxies .iTunesAppProxy ' từ assembly' DynamicProxyGenAssembly2, Phiên bản = 0.0.0.0, Văn hóa = trung lập, PublicKeyToken = null '. Các loại được đánh dấu là hội đủ điều kiện cho loại hình tương đương, nhưng một trong hai nó có chung thông số, hoặc nó không phải là một cấu trúc, COM nhập khẩu giao diện, liệt kê, hoặc ủy

Có thể với các khuôn khổ khác? Làm thế nào để bạn thực hiện TDD với các đối tượng phụ thuộc COM?

Cảm ơn trước! Hoặc ủy

+0

Những giao diện COM là nó? Ngoại lệ nào là ném Moq? Không Moq ném ngoại lệ này trên tất cả các giao diện COM, hoặc chỉ là một giao diện này? –

+0

Vâng ngoại lệ là khá chung chung: System.TypeLoadException được unhandled bởi mã người dùng Message = Không thể tải loại 'Castle.Proxies.iTunesAppProxy' từ lắp ráp 'DynamicProxyGenAssembly2, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null '. Kiểu được đánh dấu là đủ điều kiện cho tương đương kiểu, nhưng nó có tham số chung, hoặc nó không phải là một cấu trúc, giao diện nhập COM, liệt kê hoặc ủy nhiệm. –

Trả lời

2

tôi sẽ đề nghị bạn nên lấy quyền sở hữu giao diện của đối tượng COM, đây là nơi phụ thuộc Inversion Nguyên tắc sẽ đi vào chơi.

Nếu bạn không có quyền truy cập vào nguồn, bạn sẽ phải tạo trừu tượng của riêng bạn để bao bọc đối tượng COM, nếu không bạn sẽ có cuộc gọi của bên thứ ba trong suốt mã của bạn.

[EDIT]

Bây giờ trừu tượng sẽ có thể được chế giễu. Việc thực hiện thực tế của trình bao bọc sẽ có đối tượng COM như một mối quan hệ HAS-A.

Sau đó, bạn sẽ muốn có bài kiểm tra tích hợp để triển khai.

Bạn cần xử lý đối tượng COM như thể nó là thứ gì đó tương tự như cơ sở dữ liệu hoặc công cụ hiển thị đồ họa hoặc dịch vụ web.

+1

Tuy nhiên, để làm thử nghiệm bằng cách sử dụng đối tượng wrapper của tôi, tôi vẫn cần phải đáp ứng sự phụ thuộc giữa wrapper và giao diện COM, do đó, tôi vẫn cần phải thử nó. –

+0

@iCe - Xin lỗi nếu tôi không rõ ràng. Tôi nghĩ rằng bạn đã quyết định chế nhạo. – Gutzofter

+0

Đã hiểu, nên hoạt động. Ngoài ra tôi nghĩ rằng đây là một cách tiếp cận sạch sẽ hơn. Cảm ơn –

1

OK, tôi điều không có cách nào đơn giản để làm điều đó, không chắc chắn rằng một số khuôn khổ chế giễu có thể thử COM.

gì tôi có trong tâm trí của tôi ..

Bạn có một số giao diện COM, ISomeThing và đối tượng COM thực hiện giao diện CoSomeThing này, đây thực hiện một số thực. Bạn nên thực hiện một thành phần COM khác, mà sẽ thực hiện cùng một giao diện, nhưng thực sự chỉ chế giễu nó - CoSomeThingMock.

Trong mã của bạn, bạn khởi tạo CoSomeThingMock, thay vì CoSomeThing và sử dụng nó.

var component = new CoSomeThingMock(); 
var testObject = new Tested(component); 
+0

Vì vậy, nếu tôi understod tốt, bạn đang đề nghị tôi làm một "thủ công" giả. Có lẽ điều đó sẽ hiệu quả, nhưng không phải là tối ưu. –

+0

Bạn undrestanding quyền .. hướng dẫn sử dụng giả, chỉ là một cái gì đó tôi có thể tưởng tượng cho điều này .. –

+0

Bất cứ ai muốn chia sẻ một lựa chọn tự động hơn? Nếu không, tôi sẽ chấp nhận câu trả lời của Alexanderb, tôi đã thử hôm qua và hoàn toàn làm việc. –

5

Cố gắng đặt "Các loại nhúng tương thích" thành FALSE để lắp ráp có chứa giao diện COM.

+0

Tôi đã có cùng một vấn đề và đặt "Nhúng Interop Types" thành FALSE đã giúp, cảm ơn. –

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