5

Tôi sẽ tạo một trình bao bọc Managed-C++ xung quanh một số hàm C để cho phép sử dụng nó trong các giải pháp .NET khác. Tôi nhìn vào việc cung cấp một wrapper rất tối giản, một cái gì đó như:Tôi có thể kiểm tra trình bao bọc được quản lý xung quanh mã C bằng cách nào?

Chữ ký trong tiêu đề C:

void DOSTH(const char*, short, long*); 

Tiếp xúc giao diện quản lý:

public void doSomething(String^ input, short param, [Out] long^ %result); 

Để làm như vậy giải pháp của tôi sẽ có C tiêu đề và sẽ tham chiếu đến .dll chứa API C đã biên dịch mà tôi đang xây dựng dựa trên đó.

Là người mới sử dụng Visual Studio, tôi không chắc chắn làm cách nào để đơn vị kiểm tra điều này. Có thể loại bỏ các .dll để cung cấp một thực hiện giả? Có thư viện nào có thể làm cho công việc này dễ dàng không? Có một cấu trúc giải pháp cụ thể nào tôi nên nhắm đến để làm cho việc này dễ dàng hơn không?

Bất kỳ hướng dẫn nào trong lĩnh vực này đều tuyệt vời. Các tìm kiếm của Google đã khiến tôi muốn biết thêm thông tin về đơn vị kiểm tra trình bao bọc được quản lý.

Trả lời

0

Bạn chỉ cần có khả năng tạo ra trình bao bọc của mình để kiểm tra của bạn không dựa vào dll gốc?

Sau đó, bạn có thể khai báo lớp cơ sở trừu tượng cho trình bao bọc của bạn, viết một triển khai gọi dll gốc và một tệp khác cho mục đích thử nghiệm trả về giá trị đóng hộp. Hoặc bạn có thể sử dụng một khung như Moq hoặc Rhino.Mocks để giả mạo trình bao bọc của bạn.

+0

Thật không may là không - phần đó dễ dàng hơn nhiều. Tôi đang tìm một cách để kiểm tra wrapper của tôi, không phải là mã sử dụng wrapper của tôi. – Bringer128

+0

Sau đó, bạn sẽ phải thêm wrapper của bạn và dll bản địa cho dự án thử nghiệm của bạn trong cùng một cách chính xác, bạn sẽ phải thêm nó vào tất cả các ứng dụng sẽ sử dụng nó sau này. Cá nhân tôi cố gắng tránh sử dụng các hội đồng bản địa bất cứ khi nào có thể. Các vấn đề với việc triển khai, (tự động) xây dựng, nền tảng sai (x86 so với x64) và thiếu các phiên bản gốc làm hỏng ứng dụng của bạn trong thời gian chạy thường không đáng để gặp rắc rối. –

2

Trong một số trường hợp (các hạn chế về công cụ và/hoặc sự phức tạp phụ thuộc xuất hiện trong tâm trí của tôi), việc phụ thuộc chế nhạo bằng cách sử dụng các khung công tác bên ngoài là hết câu hỏi. Sau đó, có kỹ thuật viết mocks hoàn toàn hợp pháp theo cách thủ công (Tôi nghĩ rằng đó là cách để làm công cụ trước khi mocking framework trở nên phổ biến).

Và đó là cơ bản những gì bạn muốn làm - giả mạo phụ thuộc, mà trong trường hợp của bạn sẽ là thư viện C. Khung không thể giúp - bạn có thể muốn thử phương pháp thủ công.

Tạo một số thực thi đơn giản, giả mạo (giống như một bài viết, ví dụ: chỉ trả lại giá trị cố định bất kể tham số đầu vào - tự nhiên, có thể phức tạp hơn), biên dịch nó, để cho nó phơi bày chính xác cùng một tiêu đề/hàm và tham khảo nó trong dự án thử nghiệm của bạn. Đó là ý tưởng quan trọng đằng sau giả mạo (stubbing/mocking) - một đối tượng giả vờ làm một đối tượng khác.

Đơn giản như nó có vẻ, tôi đã không thực sự cố gắng đó - mang nó với một hạt muối và nhiều hơn nữa như một gợi ý theo cách mà bạn có thể đi. Giới hạn của cách tiếp cận này (ngoài việc thực sự là có thể về mặt kỹ thuật) là tùy chọn cấu hình rất kém/không có (vì DLL giả được thêm vào sẽ hoạt động giống như một tập tin cấu hình cứng có thể giúp ích, nhưng điều đó có nghĩa là ... quá nhiều công việc?).

+0

Đó luôn là một lựa chọn. Tôi đoán tôi có thể sử dụng phương pháp đó nếu các công cụ như Cgreen không thể được sử dụng trong ngữ cảnh của tôi. – Bringer128

+0

@ Bringer128: hết tò mò, bạn định sử dụng Cgreen như thế nào? Tôi đã nhìn thấy họ cung cấp các tiện ích mocking khá tốt đẹp, nhưng về cơ bản thu hẹp xuống để giả mạo DLL đó? Hoặc tôi thiếu một cái gì đó hiển nhiên ở đây? –

+0

Tôi khá chắc chắn rằng mocking DLL là cách duy nhất để làm điều đó. Tôi sẽ phải thử nghiệm đầu tiên, tôi sẽ báo cáo lại khi tôi đã tìm thấy một cái gì đó. – Bringer128

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