2009-02-11 7 views
9

Chúng tôi đang phát triển các ứng dụng để sử dụng trong AutoCAD. Về cơ bản chúng tôi tạo ra một dự án thư viện lớp, và tải .dll trong AutoCAD với một lệnh (NETLOAD).Thực tiễn tốt nhất với thử nghiệm Đơn vị trên API phần mềm của bên thứ ba (AutoCAD)

Như vậy, chúng ta có thể sử dụng lệnh "bảng màu", kiểm soát người sử dụng, hình thức vv ...

Autodesk cung cấp một API thông qua một số của dll, chạy trong thư mục chương trình của họ. Khi tham khảo các dll của bạn chỉ có thể gọi dll của lúc chạy trong khi tải ứng dụng của bạn trong AutoCAD (Đây là một bảo mật cấp phép từ AutoDesk). Đối với chúng tôi, trong khi phát triển, đây không phải là vấn đề, chúng ta cần kiểm tra trực quan trong bối cảnh của AutoCAD, vì vậy chúng tôi chỉ cần thiết lập thuộc tính Debug để chúng bắt đầu acad.exe và tải dll của chúng tôi với một kịch bản lệnh trong tham số acad.exe.

Vấn đề là khi thử đơn vị kiểm tra mã của chúng tôi, NUnit hoặc mstest không chạy trong ngữ cảnh AutoCAD và chúng cũng không thể khởi động nó. Có một công cụ gọi là Gallio, đã cung cấp một giao diện với AutoCAD, để nó có thể chạy thử nghiệm Đơn vị thông qua IPC với Named Pipes.

Tuy nhiên, giải pháp này là, đối với tôi, quá nhiều rắc rối. Tôi muốn có thể nhanh chóng viết các bài kiểm tra mà không cần phải rời khỏi IDE yêu quý của mình.

Vì vậy, điều gì, từ "chế độ xem thiết kế tốt" sẽ là cách tiếp cận tốt cho vấn đề này? Tôi đang nghĩ về cơ bản tôi sẽ cần một codebase thử nghiệm mà không tham khảo dll của AutoCAD và không thể kiểm tra mà không tham chiếu đến dll AutoCAD không thể tin được.

Tôi chắc chắn có nhiều cách để làm việc này: (IOC, DI, Adapter Pattern,.) Tôi không có những nguyên tắc này theo chiều sâu và vì vậy tôi không biết tuyến đường nào phù hợp nhất với tôi mục đích và mục tiêu.

Trả lời

8

Bước đầu tiên là phân loại mã của bạn cho các bộ phận cần AutoCAD và các bộ phận thực sự độc lập. Tạo các bài kiểm tra đơn vị cho các phần độc lập như bạn thường làm.

Đối với các phần khác, bạn cần mô hình hoạt động giống như AutoCAD. Làm cho chúng càng đơn giản càng tốt (ví dụ, chỉ trả về các câu trả lời đúng trong các phương thức mà không thực hiện bất kỳ phép tính nào). Bây giờ, bạn cần một số nhóm lớp học:

  1. Một bộ giao diện mà mã của bạn sử dụng để đạt được điều gì đó (ví dụ: tải bản vẽ).

  2. Một tập hợp các triển khai cho bộ giao diện được gọi có tên là AutoCAD dll.

  3. Một tập hợp các lớp thử triển khai trong ngữ cảnh của AutoCAD. Chỉ cần tạo một giao diện người dùng nhỏ với một vài nút, nơi bạn có thể chạy mã này. Nó được sử dụng để trấn an bản thân rằng mockups của bạn làm điều đúng. Các tham số và kết quả của phương thức log cho một số tệp để bạn có thể thử cách AutoCAD phản hồi. Nếu một mockup phá vỡ, bạn có thể sử dụng mã này để xác minh những gì AutoCAD đang làm và bạn có thể sử dụng nó như là một tham chiếu khi phát triển các mockups.

  4. Khi bạn biết cách AutoCAD phản hồi, hãy tạo các mô hình. Trong các thử nghiệm của bạn, hãy tạo chúng với các kết quả mong muốn (và các lỗi, do đó bạn có thể kiểm tra xử lý lỗi). Vì vậy, khi bạn có boolean loadDrawing(File filename), hãy tạo một mô hình trả về true cho tên tệp exists.dxffalse cho bất kỳ mục đích nào khác.

  5. Sử dụng nhà máy hoặc DI để cho mã ứng dụng của bạn triển khai sử dụng. Tôi có xu hướng có một lớp cấu hình toàn cầu lớn với rất nhiều trường công cộng, nơi tôi chỉ lưu trữ các đối tượng để sử dụng. Tôi có thể thiết lập điều này ngay từ đầu, nó rất nhanh, thật dễ hiểu. Nếu bạn cần tạo các đối tượng trong thời gian chạy, sau đó đặt các nhà máy trong lớp cấu hình tạo ra các đối tượng cho bạn, để bạn có thể hoán đổi chúng.

+0

Cảm ơn câu trả lời của bạn. Tôi sẽ nhìn vào hướng đó. Tôi có một vấn đề với nhận xét 3d của bạn: Vì chúng tôi không chỉ đơn giản là mở một tập tin nhưng sử dụng giao dịch, chỉnh sửa các đối tượng vv ... Tôi có nên tạo một wrapper cho mỗi đối tượng Acad sau đó? – Bertvan

+2

@Bertvan: Tìm câu trả lời cho câu hỏi này: Bạn chắc chắn rằng mã của bạn sẽ ngắt cho mỗi đối tượng ACad? Nếu bạn không chắc chắn, hãy viết một bài kiểm tra. Khi nó nhàm chán, dừng lại. Khi bạn tìm thấy các lỗi mới và trở nên không chắc chắn một lần nữa, hãy thêm các thử nghiệm khác. Bạn phải tìm * đường dẫn tốt nhất * của bạn. –

0

Tôi đã viết ... và sau đó đã phá vỡ ... Á hậu thử nghiệm cho AutoCAD. Đó là tại https://github.com/CADbloke/CADtest. Nếu bạn quan tâm đến nó, hãy di chuyển tôi và tôi sẽ sửa nó nhanh hơn. Tôi đang đợi NUnit v3 phát hành trước khi tôi giải quyết nó.

Nếu bạn đặt lại cam kết thứ 3 trong repo đó (tôi nghĩ) và fiddle với nó từ đó nó sẽ chạy.