2008-10-07 34 views
6

thể trùng lặp:
Unit Testing C CodeUnit Testing Khung C

Tôi đã nhìn thấy một số câu hỏi cụ thể để C++, nhưng tôi thực sự tò mò về C. Tôi đang cố gắng để thêm một khung kiểm thử đơn vị tiêu chuẩn vào môi trường xây dựng của chúng ta. Mục tiêu chính của tôi là khuyến khích các nhà phát triển của chúng tôi viết các bài kiểm tra đơn vị và chuẩn hóa các bài kiểm tra đó để những người khác có thể chạy chúng. Lý tưởng nhất là tôi muốn chạy các bài kiểm tra đơn vị như một phần của bản dựng hàng đêm của chúng tôi.

Chúng tôi bắt đầu một số công việc với CUnit, hoạt động ngoại trừ mọi thứ chạy trong một luồng và bất kỳ lỗi bộ nhớ nào khiến cho các bài kiểm tra đơn vị ngừng chạy, điều này khá khó chịu. Tôi cũng thấy rất khó để viết các bài kiểm tra, nhưng đó có thể chỉ là thử nghiệm đơn vị cho bạn.

Có ai biết lựa chọn thay thế tốt không? Có ai đã có kinh nghiệm với C++ Unit Testers với mã C-only không?

+0

Xem [tại đây] [1] để biết câu trả lời của bạn. (Trùng lặp) [1]: http: //stackoverflow.com/questions/65820/unit-testing-c-code – jjnguy

Trả lời

0

Chúng tôi bắt đầu một số công việc với CUnit, hoạt động ngoại trừ mọi thứ chạy trong một luồng và bất kỳ lỗi bộ nhớ nào gây ra các kiểm tra đơn vị ngừng chạy, điều này khá khó chịu.

Có một khuôn khổ kiểm tra đơn vị C dĩa và thực thi từng trường hợp thử nghiệm trong một quá trình riêng biệt để tất cả các bài kiểm tra được thực hiện ngay cả trong sự hiện diện của các bài kiểm tra mà cốt lõi bãi: Check

Tuy nhiên, tôi m sợ các hình phạt hiệu suất tất cả các dĩa mang lại (và phải trung thực, tôi đã không cung cấp cho nó một thử). Nhưng tôi sẽ không sống lâu với bất kỳ việc bán lõi thử nghiệm nào: tôi thường sửa chữa nó ngay lập tức.

Ví dụ: assertion guard: sử dụng xác nhận để tránh sử dụng con trỏ NULL (ví dụ: minunit).

void test_function_returning_a_pointer(void) 
{ 
    struct_t *theStruct = function_returning_a_pointer(); 
    MU_ASSERT(theStruct != NULL); 

    //--- now you can use the pointer 
    MU_ASSERT(theStruct->field1 == 0); 

    return MU_PASSED; 
} 

Bằng cách này, tôi không biết về bất kỳ C++ đơn vị khuôn khổ bài kiểm tra đó sẽ không sụp đổ trong trường hợp vi phạm phân khúc.

Tôi cũng thấy khó khăn khi viết các bài kiểm tra, nhưng đó có thể chỉ là thử nghiệm đơn vị cho bạn.

Bạn có thể giải thích về những khó khăn của mình không? Bạn đang cố gắng đưa mã cũ vào thử nghiệm?

0

Trong trường hợp bạn đang nhắm mục tiêu nền tảng Win32 hoặc chế độ hạt nhân NT, bạn nên xem cfix.

1

Tôi viết phần mềm nhúng bằng C và tôi quyết định viết khung của riêng mình. Nó rất đơn giản và được viết cho MS Visual Studio. Nó dễ dàng được chuyển đến các nền tảng khác.

http://code.google.com/p/cunitwin32/

Nếu bạn đang nhắm mục tiêu linux Tôi nghĩ rằng Kiểm tra có thể đáp ứng nhu cầu của bạn.

+0

P.S.Nó xử lý các vi phạm truy cập bộ nhớ vv một cách duyên dáng (tôi cũng sử dụng nó trong môi trường tự động) – Dushara

Các vấn đề liên quan