Quay lại khi tôi đang làm việc trong C ++ (từ chối trách nhiệm: đây là khoảng năm 2005), tôi đã sử dụng một phiên bản sửa đổi một chút của TUT (Khung kiểm tra đơn vị mẫu) . Tôi thích nó vì nó rất nhẹ, giúp dễ dàng sửa đổi và có nghĩa là có rất ít "keo" cần thiết khi viết bài kiểm tra.
Đây là một sửa đổi rất đơn giản mà tôi đã thực hiện, làm cho nó thậm chí còn háo hức hơn / sạch hơn để viết bài kiểm tra:
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__)
Sự thay đổi khác mà tôi đã thực hiện là định dạng đầu ra của nó, để các lỗi thử nghiệm xuất hiện chính xác trong danh sách lỗi của Visual Studios (khi được chạy như một phần của bản dựng), có thể nhấp để đi đến tệp và dòng thử nghiệm thất bại.
(Khả năng thực hiện loại điều này có nghĩa là nó có thể được thực hiện để phù hợp với quy trình TDD / CI của bạn, thay vì buộc bạn phải phù hợp với nó.)
Đây là một thử nghiệm ví dụ (từ ngăn xếp lệnh từ trình soạn thảo của tôi):
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);
}
(Trong đoạn mã trên, cs
và od
là đồ đạc trên mỗi mô-đun và TestCommand
là một đối tượng giả.)