Tôi sẽ nói chuyện với bộ phận của tôi vào tuần tới về thử nghiệm đơn vị và phát triển dựa trên thử nghiệm. Là một phần của điều này, tôi sẽ trình bày một số ví dụ trong thế giới thực từ một số mã tôi đã viết gần đây, nhưng tôi cũng muốn hiển thị một số ví dụ rất đơn giản mà tôi sẽ viết trong bài nói chuyện.
Tôi đã tìm kiếm trên web các ví dụ hay, nhưng tôi đã vật lộn để tìm bất kỳ thứ gì đặc biệt áp dụng cho lĩnh vực phát triển của chúng tôi. Hầu như tất cả các phần mềm chúng tôi viết là các hệ thống điều khiển nhúng sâu chạy trên các vi điều khiển nhỏ. Có rất nhiều mã C có thể dễ dàng áp dụng cho thử nghiệm đơn vị (tôi sẽ nói về thử nghiệm đơn vị trên PC thay vì trên chính mục tiêu) miễn là bạn tránh xa lớp 'dưới cùng': nội dung nói trực tiếp đến các thiết bị ngoại vi vi điều khiển. Tuy nhiên, hầu hết các ví dụ tôi đã tìm thấy có xu hướng dựa trên xử lý chuỗi (ví dụ: ví dụ tuyệt vời về Lặn vào Python Roman) và vì chúng tôi hầu như không sử dụng chuỗi này nên điều này không thực sự phù hợp (về các hàm thư viện duy nhất mà mã của chúng tôi thường sử dụng là memcpy
, memcmp
và memset
,strcat
hoặc biểu thức chính quy không hoàn toàn đúng).
Vì vậy, về câu hỏi: xin vui lòng bất cứ ai có thể cung cấp một số ví dụ tốt về các chức năng mà tôi có thể sử dụng để trình diễn thử nghiệm đơn vị trong phiên trực tiếp? Một câu trả lời tốt trong quan điểm (có thể thay đổi) của tôi có lẽ sẽ là:
- Một hàm đủ đơn giản để bất kỳ ai (ngay cả những người chỉ thỉnh thoảng viết mã) có thể hiểu được;
- Một hàm không xuất hiện vô nghĩa (nghĩa là tìm ra chẵn lẻ hoặc CRC có thể tốt hơn một hàm nhân hai số với nhau và thêm một hằng số ngẫu nhiên);
- Một chức năng đủ ngắn để viết trước phòng của mọi người (tôi có thể tận dụng nhiều bảng ghi của Vim để giảm lỗi ...);
- Một hàm lấy số, mảng, con trỏ hoặc cấu trúc làm tham số và trả về một cái gì đó tương tự, thay vì xử lý chuỗi;
- Một chức năng mà có một lỗi đơn giản (ví dụ
>
chứ không phải>=
) đó là dễ dàng để đưa vào đó sẽ vẫn làm việc trong hầu hết các trường hợp, nhưng sẽ phá vỡ với một số trường hợp cụ thể cạnh: dễ dàng để xác định và sửa chữa với một thử nghiệm đơn vị.
Có suy nghĩ gì không?
Mặc dù có thể không liên quan, nhưng các bài kiểm tra có thể sẽ được viết bằng C ++ bằng Google Test Framework: tất cả các tiêu đề của chúng tôi đã có #ifdef __cplusplus extern "C" {
trình bao bọc xung quanh chúng; điều này đã làm việc tốt với các bài kiểm tra tôi đã làm cho đến nay.