जब मैं C ++ (अस्वीकरण: यह 2005 के बारे में था) में काम कर रहा था, तो मैंने TUT (टेम्पलेट यूनिट फ्रेमवर्क) के थोड़ा संशोधित संस्करण का उपयोग किया । मुझे यह पसंद आया क्योंकि यह बहुत हल्का था, जिससे इसे संशोधित करना आसान था, और इसका मतलब था कि परीक्षण लिखते समय बहुत कम "गोंद" आवश्यक था।
यहाँ एक बहुत सरल संशोधन मैंने किया है, जो इसे परीक्षण लिखने के लिए भी ईजी / क्लीनर बनाता है:
static int BogusFunction() { return __COUNTER__; } // Increment the __COUNTER__ to the correct position for the begining of the tests
#define TEST template<> template<> void object::test<__COUNTER__>()
#define ENSURE(msg, cond) ensure(msg, cond, __FILE__, __LINE__)
#define ENSURE_EQUALS(msg, actual, expected) ensure_equals(msg, actual, expected, __FILE__, __LINE__)
#define ENSURE_DISTANCE(msg, actual, expected, distance) ensure_distance(msg, actual, expected, distance, __FILE__, __LINE__)
#define FAIL(msg) fail(msg, __FILE__, __LINE__)
मेरे द्वारा किया गया अन्य परिवर्तन इसके आउटपुट स्वरूप में था, ताकि दृश्य स्टूडियो की त्रुटि सूची (जब एक बिल्ड के भाग के रूप में चलाया जाए) में परीक्षण विफलताओं को सही ढंग से दिखाई दे, तो फ़ाइल में जाने में विफल परीक्षण की रेखा और क्लिक करें।
(इस प्रकार की कार्य करने की क्षमता का अर्थ है कि यह आपके TDD / CI प्रक्रिया में फिट होने के लिए बनाया जा सकता है, बजाय इसके कि आप इसे फिट करने के लिए मजबूर करें।)
यहाँ एक उदाहरण परीक्षण है (मेरे संपादक से कमांड-स्टैक से):
TEST // Undoing a command
{
cs.AddCommand(new TestCommand);
cs.AddCommand(new TestCommand(od));
ENSURE("Undo success", cs.Undo());
ENSURE_EQUALS("Stack size", cs.size(), 2);
ENSURE_EQUALS("Command's Undo() was called", od.undo, 1);
ENSURE_EQUALS("Command's Redo() not called", od.redo, 0);
ACommandStack::const_iterator it = cs.end();
ENSURE("Command is redoable", cs.GetUndoPos() == --it);
}
(उपरोक्त कोड में, cs
और od
प्रति-मॉड्यूल जुड़नार हैं, और TestCommand
एक नकली वस्तु है।)