Qt đi kèm với QTest
và có một số tài liệu: ví dụ: an official tutorial.Qt: chạy thử nghiệm đơn vị từ nhiều lớp kiểm tra và tóm tắt kết quả từ tất cả chúng
Tuy nhiên, QTest
khuyến khích bạn tổ chức các bài kiểm tra đơn vị dưới dạng tệp thực thi riêng biệt. Có macro đặc biệt cho điều này, tạo ra main()
: QTEST_MAIN()
Thành thật mà nói, tôi thực sự không thích cách tiếp cận này: thường hữu ích hơn khi chạy tất cả các thử nghiệm cùng một lúc, để đảm bảo rằng những thay đổi gần đây t phá vỡ bất cứ điều gì. Đôi khi, rất hữu ích để che giấu một số thử nghiệm hoặc thực hiện một số thử nghiệm riêng lẻ, nhưng đây là một ngoại lệ, không phải là quy tắc.
Vì vậy, tôi muốn chạy tất cả các thử nghiệm cùng một lúc. Ok, tôi có thể viết của riêng tôi main()
mà thực hiện tất cả các bài kiểm tra tôi muốn, nói, như thế này:
int main(int argc, char **argv)
{
int status = 0;
//-- run all tests
{
TestHTCodecISO14230 tc;
status |= QTest::qExec(&tc, argc, argv);
}
{
TestHTDataMsg tc;
status |= QTest::qExec(&tc, argc, argv);
}
return status;
}
Và nó chạy tất cả các bài kiểm tra, nhưng vấn đề là tôi không có bản tóm tắt thuận tiện của tất cả các bài kiểm tra. Này, cho hai bài kiểm tra trên, tôi có hai bản tóm tắt riêng biệt:
********* Start testing of TestHTCodecISO14230 *********
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1)
PASS : TestHTCodecISO14230::initTestCase()
PASS : TestHTCodecISO14230::decode_summary()
PASS : TestHTCodecISO14230::encode()
PASS : TestHTCodecISO14230::decode_encoded()
PASS : TestHTCodecISO14230::cleanupTestCase()
Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestHTCodecISO14230 *********
********* Start testing of TestHTDataMsg *********
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1)
PASS : TestHTDataMsg::initTestCase()
PASS : TestHTDataMsg::test1()
PASS : TestHTDataMsg::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestHTDataMsg *********
Thực tế là trở status
sẽ khác không trong trường hợp lỗi chắc chắn là hữu ích, nhưng là sẽ được nhiều hơn nữa hữu ích nếu tôi có tóm tắt cũng như:
Totals: 8 passed, 0 failed, 0 skipped, 0 blacklisted
Từ những gì tôi nhìn thấy, nó là không thể: tôi không thể tìm ra cách để lập trình có được số trôi qua, thất bại, bỏ qua và kiểm tra danh sách đen: qExec()
chỉ là một chức năng trong không gian tên QTest
, vì vậy, không thể thu thập một số thông tin bổ sung sau khi nó thực thi.
Vâng, chúng ta có thể phân tích các chuỗi đầu ra, nhưng, ugh ...
Đối với tôi, nó trông giống như thiết kế nghèo. Sẽ tốt hơn nếu bạn làm cho lớp QTest
trở thành một lớp, sau đó tạo một thể hiện của nó và cấp một số lớp thử nghiệm cho nó. Sau đó, một số thông tin bổ sung có thể được thu thập từ một cá thể.
Hoặc, có thể tôi đã bỏ lỡ điều gì đó.
Vì vậy, câu hỏi đặt ra là: có thể với QTest
để có kết quả tóm tắt của tất cả các lớp thử nghiệm đơn vị không?
Không phải 'TestHTCodecISO14230' và' TestHTDataMsg' là lớp học của bạn? Tại sao bạn không thể mở rộng chúng để xử lý các bài kiểm tra không thành công? – vahancho