2008-11-19 40 views
11

Nhóm của tôi chịu trách nhiệm phát triển API cho một hệ thống lớn mà chúng tôi cũng viết. Chúng tôi cần cung cấp mã ví dụ để các nhà phát triển khác sử dụng API của chúng tôi có thể tìm hiểu cách sử dụng nó. Chúng tôi đã ghi lại mã bằng cách sử dụng các nhận xét tài liệu xml. ví dụ:Tự động kiểm tra đơn vị Mã số

/// <summary>Summary here</summary> 
/// <example>Here is an example <code>example code here</code> </example> 
public void SomeFunction() 

Sau đó, chúng tôi sử dụng Sandcastle và xây dựng các tệp trợ giúp cần thiết (chm và trang web trực tuyến).

Rất lúng túng khi mã ví dụ không hoạt động và điều này thường là do một số chức năng đã thay đổi hoặc lỗi đơn giản.

Có ai từng làm một cái gì đó như thế này, nhưng cũng đã cấu hình kiểm tra đơn vị để chạy trên mã ví dụ để chúng được biết là làm việc trong quá trình xây dựng?

Trả lời

8

Có, sandcastle hỗ trợ điều này và thật tuyệt vời để duy trì tính chính xác của các ví dụ. Bạn có thể trỏ đến một vùng mã như thế này:

/// <summary> 
    /// Gizmo which can act as client or server. 
    /// </summary> 
    /// <example> 
    /// The following example shows how to use the gizmo as a client: 
    /// <code lang="cs" 
    /// source="..\gizmo.unittests\TestGizmo.cs" 
    /// region="GizmoClientSample"/> 
    /// </example> 
    public class Gizmo 

Sau đó bạn có thể sử dụng một số mã kiểm tra trong TestGizmo.cs làm ví dụ bằng cách bao quanh nó trong một khu vực:

[Test] 
public GizmoCanActAsClient() 
{ 
    #region GizmoClientSample 
    Gizmo gizmo = new Gizmo(); 
    gizmo.ActAsClient(); 
    #endregion 
} 

Nên biết trước: Nếu bạn di chuyển hoặc đổi tên tệp thử nghiệm, bạn sẽ chỉ gặp lỗi về việc này khi bạn cố gắng tạo lại tài liệu bằng sandcastle.

0

Giải pháp đơn giản: Thực hiện một ứng dụng nhỏ mà bạn bao gồm tất cả các tiêu đề mẫu mã và sau đó gọi điểm vào tương ứng của họ

#include "samples/sampleA.h" 

void main() 
{ 
    SomeFunction(); 
} 

sau đó sau khi bạn thực hiện một xây dựng chạy các ứng dụng này ít bạn cần hãy chắc chắn rằng họ chạy ok. Nhưng bạn có thể xác minh rằng mã đã chạy ok mà không cần ai đó có một bữa tiệc ngủ với máy chủ NightlyBuild?

Giải pháp tốt hơn: Đăng xuất kết quả và có ai đó xem nó vào buổi sáng.

Giải pháp thậm chí tốt hơn: Đăng xuất kết quả và grep nó hoặc một cái gì đó để không ai phải nhìn vào nó trừ khi nó bị hỏng.

Giải pháp tốt nhất: Tìm một khung kiểm tra phù hợp, hy vọng điều gì đó với tất cả chuông và còi bạn có thể nhận để gửi email cho mọi người nếu bị hỏng hoặc tương tự. Trong trường hợp của chúng tôi, chúng tôi tránh các chuông và còi thay vì chúng tôi đã kết nối Cảnh sát USB Siren bị tắt khi có sự cố xảy ra Rất thú vị!

0

Tôi chưa tự làm điều này nhưng tôi đã thấy điều này được đề cập trong các sách Lập trình thực dụng. Nếu tôi không nhầm cuốn sách "Thử nghiệm đơn vị thực dụng trong C# với Nunit" đề cập rằng họ đã làm điều này cho cuốn sách. Nó có thể được rằng họ đã đề cập trong một podcast của họ mặc dù.

Họ đã đề cập họ có máy chủ tạo liên tục được thiết lập cho sách của họ. Nếu tôi không nhầm họ đã sử dụng latex hoặc một số đánh dấu dựa trên văn bản khác để viết sách của họ và họ đã xây dựng các bước để định dạng đánh dấu và xây dựng và mã thử nghiệm đơn vị trong sách.

9

Tôi khuyên bạn nên sử dụng một chút đánh dấu đặc biệt trong XML của bạn có nội dung "Lấy mẫu mã từ địa điểm này". Nó sẽ đề cập đến một tập tin C# bình thường có thể chạy với các bài kiểm tra đơn vị. Để lấy một ví dụ của bạn, bạn có thể có:

/// <summary>Summary here</summary> 
/// <example>Here is an example 
/// <code>!!sourcefile:SomeClassTest.cs#SomeFunction!!</code></example> 
public void SomeFunction() 

kiểm tra đơn vị của bạn chạy như bình thường, và sau đó chèn một bước xây dựng giữa "tạo XML" và "chạy Sandcastle" bạn muốn thay thế từng "tập tin mã thông báo" với nội dung thích hợp. Thậm chí có thể có móc mà bạn có thể đưa vào Sandcastle để làm điều này vào thời gian tạo tài liệu - Tôi không biết đủ về Sandcastle để biết chắc chắn.

Thật xấu xí khi phát minh ra đánh dấu của riêng bạn, nhưng nó sẽ hoạt động.

Tất nhiên, điều này giả định rằng các ví dụ mã có thể dễ dàng kiểm tra đơn vị - một số có thể không (nếu chúng đang xử lý tài nguyên, v.v.). Ít nhất bạn sẽ biết nó biên dịch mặc dù :)

+0

Tôi đã thực hiện dự án để thực hiện việc này: http://code.google.com/p/addsourcetodocumentation/ – khebbie

+1

Sandcastle có hỗ trợ tích hợp cho việc này. Xem câu trả lời của riêng tôi. –