আমি যখন সি ++ এ কাজ করছিলাম (দাবি অস্বীকার: এটি 2005 সালের প্রায়), আমি টিউটি (টেম্পলেট ইউনিট টেস্ট ফ্রেমওয়ার্ক) এর কিছুটা পরিবর্তিত সংস্করণ ব্যবহার করেছি । আমি এটি পছন্দ করেছি কারণ এটি খুব কম ওজনের ছিল, যা এটি সংশোধন করা সহজ করে তোলে এবং পরীক্ষার লেখার সময় খুব কম "আঠালো" প্রয়োজন ছিল।
এখানে আমি তৈরি করেছি একটি খুব সাধারণ পরিবর্তন, যা পরীক্ষাগুলি লিখতে এমনকি এটি ইজার / ক্লিনারও করে:
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__)
আমি যে অন্য পরিবর্তন করেছি তা তার আউটপুট বিন্যাসে হয়েছিল, যাতে পরীক্ষার ব্যর্থতা ভিজ্যুয়াল স্টুডিওগুলির ত্রুটি তালিকায় সঠিকভাবে উপস্থিত হতে পারে (যখন কোনও বিল্ডের অংশ হিসাবে চালিত হয়), ব্যর্থ পরীক্ষার ফাইল এবং লাইনে যেতে ক্লিকযোগ্য।
(এই ধরণের জিনিস করার দক্ষতার অর্থ হ'ল এটি আপনাকে আপনার টিডিডি / সিআই প্রক্রিয়াতে ফিট করার জন্য তৈরি করা যেতে পারে, বরং এটির সাথে আপনাকে ফিট করতে বাধ্য করা))
এখানে একটি উদাহরণ পরীক্ষা (আমার সম্পাদক থেকে কমান্ড-স্ট্যাক থেকে):
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
এটি একটি মক অবজেক্ট is)