Kembali ketika saya bekerja di C ++ (disclaimer: ini sekitar 2005), saya menggunakan versi TUT yang sedikit dimodifikasi (Kerangka Uji Unit Templat) . Saya menyukainya karena sangat ringan, yang membuatnya mudah untuk dimodifikasi, dan berarti ada sangat sedikit "lem" yang diperlukan ketika menulis tes.
Ini adalah salah satu modifikasi sederhana yang saya buat, yang membuatnya lebih mudah / bersih untuk menulis tes:
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__)
Perubahan lain yang saya buat adalah untuk format outputnya, sehingga kegagalan tes akan muncul dengan benar dalam daftar kesalahan Visual Studios (ketika dijalankan sebagai bagian dari build), dapat diklik untuk pergi ke file dan garis tes gagal.
(Kemampuan untuk melakukan hal semacam ini berarti bahwa hal itu dapat dibuat agar sesuai dengan proses TDD / CI Anda, daripada memaksa Anda untuk masuk ke dalamnya.)
Berikut ini adalah contoh uji (dari tumpukan perintah dari editor saya):
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);
}
(Dalam kode di atas, cs
dan od
merupakan perlengkapan per-modul, dan TestCommand
merupakan objek tiruan.)