2008-11-19 12 views
11

मेरी टीम एक बड़ी प्रणाली के लिए एक एपीआई के विकास के लिए ज़िम्मेदार है जिसे हम भी लिखते हैं। हमें उदाहरण कोड प्रदान करने की आवश्यकता है ताकि हमारे एपीआई का उपयोग करने वाले अन्य डेवलपर सीख सकें कि इसका उपयोग कैसे किया जाए। हम XML दस्तावेज़ टिप्पणियों का उपयोग कर कोड को दस्तावेज कर रहे हैं। उदाहरण के लिए।स्वचालित रूप से यूनिट टेस्ट उदाहरण कोड

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

हम फिर Sandcastle का उपयोग करते हैं और हमें आवश्यक सहायता फ़ाइलों (सीएम और एक ऑनलाइन वेबसाइट) का निर्माण करते हैं।

उदाहरण कोड कोड काम नहीं करता है, यह आमतौर पर शर्मनाक है, और यह आमतौर पर इसलिए होता है क्योंकि कुछ कार्यक्षमता बदल गई है या एक साधारण त्रुटि है।

क्या किसी ने कभी ऐसा कुछ किया है, लेकिन उदाहरण कोड पर चलाने के लिए यूनिट परीक्षण भी कॉन्फ़िगर किया गया है ताकि वे निर्माण के दौरान काम करने के लिए जाने जाते हैं?

उत्तर

8

हां, sandcastle इसका समर्थन करता है और उदाहरणों की शुद्धता को बनाए रखने के लिए यह बहुत अच्छा है। आप इस प्रकार का कोड क्षेत्र को इंगित कर सकते हैं:

[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(); 
} 

तो फोन सुनिश्चित करें कि वे ठीक भाग गए। लेकिन क्या आप यह सत्यापित कर सकते हैं कि कोड नाइटलीबिल्ड सर्वर के साथ स्लमम्बर पार्टी के बिना ठीक है?

बेहतर समाधान: आउटपुट लॉग करें और इसे सुबह में देखें।

यहां तक ​​कि बेहतर समाधान: आउटपुट लॉग इन करें और इसे grep या grep ताकि किसी को इसे तोड़ने तक इसे देखना न पड़े।

सर्वश्रेष्ठ समाधान: एक उपयुक्त परीक्षण ढांचा ढूंढें, उम्मीद है कि आप सभी घंटियों और सीटी के साथ कुछ प्राप्त कर सकते हैं ताकि अगर यह टूटा हुआ हो या ऐसा कुछ हो तो लोगों को ईमेल कर सकते हैं। हमारे मामले में हम घंटी और सीटी से बचते हैं, इसके बजाय हमने यूएसबी पुलिस साइरेन को जोड़ा जो कुछ तोड़ने पर चला जाता है यह काफी रोमांचक है!

0

मैंने इसे स्वयं नहीं किया है, लेकिन मैंने इसे व्यावहारिक प्रोग्रामर किताबों में उल्लेख किया है। अगर मुझे पुस्तक "नग्मित के साथ सी # में व्यावहारिक यूनिट परीक्षण" की गलती नहीं है, तो उन्होंने उल्लेख किया कि उन्होंने पुस्तक के लिए यह किया था। ऐसा हो सकता है कि उन्होंने अपने पॉडकास्ट में से एक में उल्लेख किया था।

उन्होंने उल्लेख किया कि उनके पास अपनी पुस्तकों के लिए निरंतर बिल्ड सर्वर स्थापित है। अगर मुझे गलत नहीं लगता है तो उन्होंने अपनी किताबें लिखने के लिए लेटेक्स या कुछ अन्य टेक्स्ट आधारित मार्कअप का उपयोग किया था और उन्होंने पुस्तक में मार्कअप और बिल्डिंग और यूनिट परीक्षण कोड को स्वरूपित करने के लिए कदम उठाए थे।

9

मैं आपके एक्सएमएल में मार्कअप के एक विशेष बिट का उपयोग करने का सुझाव दूंगा जो कहता है, "इस जगह से कोड नमूना लें"। यह एक सामान्य सी # फ़ाइल का संदर्भ देगा जिसे यूनिट परीक्षणों के साथ चलाया जा सकता है। अपने उदाहरण लेते हैं, आप हो सकता है:

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

आपका इकाई परीक्षण सामान्य रूप में चलाने के लिए, और फिर "एक्सएमएल बनाने" और "सैंडकैसल चलाने" आप के साथ एक "फ़ाइल टोकन" की जगह होगी जो निर्माण कदम सम्मिलित उचित सामग्री डॉक पीढ़ी के समय में ऐसा करने के लिए सैंडकैसल में भी लगाए गए हुक भी हो सकते हैं - मुझे निश्चित रूप से जानने के लिए Sandcastle के बारे में पर्याप्त जानकारी नहीं है।

यह निश्चित रूप से अपना खुद का मार्कअप आविष्कार करने के लिए बदसूरत है, लेकिन इसे काम करना चाहिए।

बेशक, यह मानता है कि कोड उदाहरण आसानी से यूनिट टेस्टेबल हैं - कुछ नहीं हो सकते हैं (यदि वे संसाधनों से निपट रहे हैं आदि)। कम से कम आप इसे संकलित करते हैं हालांकि :)

+0

मैंने ऐसा करने के लिए एक प्रोजेक्ट बनाया है: http://code.google.com/p/addsourcetodocumentation/ – khebbie

+1

Sandcastle के लिए अंतर्निहित समर्थन है। मेरा अपना जवाब देखें। –

संबंधित मुद्दे