2008-11-19 117 views
11

我的團隊負責開發我們也編寫的大型系統的API。我們需要提供示例代碼,以便使用我們的API的其他開發人員可以學習如何使用它。我們一直在使用xml文檔註釋來記錄代碼。 例如。自動單元測試示例代碼

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

然後,我們使用Sandcastle並構建我們需要的幫助文件(chm和一個在線網站)。

當示例代碼不起作用時,這是相當尷尬的,這通常是因爲某些功能已更改或一個簡單的錯誤。

有沒有人曾經做過這樣的事情,還配置了單元測試來運行示例代碼,以便知道它們在構建期間工作?

回答

8

是的,沙堡支持這一點,這是很好的維護例子的正確性。您可以指向這樣的代碼區域:

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

警告::

/// <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 

然後,您可以在一個區域圍繞它使用TestGizmo.cs一些測試代碼作爲一個例子,如果你移動或重命名測試文件,當您嘗試使用sandcastle重新生成文檔時,您只會收到有關此錯誤的信息。

0

簡單的解決方案: 做一個小的應用程序中,你包括所有的示例代碼頭,然後調用各自的切入點

#include "samples/sampleA.h" 

void main() 
{ 
    SomeFunction(); 
} 

然後你做後一個構建運行你需要這些小應用程序,以確保他們跑得好。 但是,如果沒有人與NightlyBuild服務器進行睡眠派對,您是否可以驗證代碼是否正常運行?

更好的解決方案:記錄輸出,並有人在早上看它。

更好的解決方案:記錄輸出和grep它什麼的,所以沒有人必須看它,除非它被破壞。

最好的解決方案:找到一個合適的測試框架,希望與所有的花裏胡哨的東西,你可以得到,因此可以通過電子郵件的人,如果其損壞或類似的東西。在我們的情況下,我們避免了花裏胡哨的聲音,而是連接了一個USB警笛,當事情中斷時它就會熄滅這非常令人興奮!

0

我自己沒有這樣做過,但我在Pragmatic Programmers的書籍中看到過這個。如果我沒有弄錯這本書「C#與Nunit的實用單元測試」,他提到他們爲這本書做了這個工作。這可能是他們在其中一個播客中提到的。

他們提到他們爲他們的書設置了一個連續的構建服務器。如果我沒有弄錯,他們會使用膠乳或其他基於文本的標記來編寫他們的書籍,並且他們已經構建了書中用於格式化標記和構建以及單元測試代碼的步驟。

9

我會建議在您的XML中使用特殊的標記位,它說:「從這個地方抓取代碼示例」。它會涉及一個正常的C#文件,它可以在單元測試中運行。把你的例子,你可能有:

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

單元測試運行正常,然後再插入之間的「創建XML」和「跑沙堡」你會替換每個「文件標記」用一個構建步驟適當的內容。甚至可能有一些鉤子可以放入沙堡,在文檔生成時做到這一點 - 我對Sandcastle知之甚少。

發明自己的標記當然是醜陋的,但它應該起作用。

當然,這裏假定代碼示例很容易進行單元測試 - 有些可能不是(如果他們正在處理資源等)。至少你會知道它編譯雖然:)

+0

我已經完成了一個項目: http://code.google.com/p/addsourcetodocumentation/ – khebbie 2008-12-01 13:34:37