Đầu tiên, hãy tự hỏi "Tại sao các bài kiểm tra đơn vị khó viết cho mã thực của tôi?" Có lẽ câu trả lời là mã thực sự của bạn đang làm quá nhiều. Nếu bạn có một mô-đun mã đầy các câu lệnh "mới" và câu lệnh "nếu" và "chuyển đổi" và câu lệnh toán học thông minh và truy cập cơ sở dữ liệu thì sẽ rất khó để viết một bài kiểm tra, hãy để một mình kiểm tra đầy đủ logic và môn Toán. Nhưng nếu bạn kéo các câu lệnh "mới" vào một phương thức của nhà máy, bạn có thể dễ dàng cung cấp các đối tượng giả để kiểm tra.Nếu bạn kéo các mệnh đề "if" và các câu lệnh "chuyển đổi" ra thành các mẫu máy trạng thái, bạn sẽ không có quá nhiều kết hợp để kiểm tra. Nếu bạn loại bỏ quyền truy cập cơ sở dữ liệu vào một đối tượng nhà cung cấp dữ liệu ngoài, bạn có thể cung cấp dữ liệu thử nghiệm đơn giản để thực thi các câu lệnh toán học của mình. Bây giờ bạn đang thử nghiệm việc tạo đối tượng, chuyển tiếp trạng thái và truy cập dữ liệu một cách riêng biệt từ các câu lệnh toán học thông minh của bạn. Tất cả các bước này trở nên dễ dàng hơn bằng cách đơn giản hóa chúng.
Mã lý do chính khó kiểm tra là mã chứa "phụ thuộc nội bộ", chẳng hạn như phụ thuộc mà nó tạo hoặc phụ thuộc vào thư viện. Nếu mã của bạn nói "Foo theFoo = new Foo();" bạn không thể dễ dàng thay thế một MockFoo để thử nghiệm. Nhưng nếu phương thức khởi tạo hoặc phương thức của bạn yêu cầu theFoo được truyền vào thay vì xây dựng chính nó, thì việc khai thác thử nghiệm của bạn có thể dễ dàng vượt qua trong một MockFoo.
Khi bạn viết mã, hãy tự hỏi "làm cách nào tôi có thể viết một bài kiểm tra đơn vị cho mã này?" Nếu câu trả lời là "khó", bạn có thể xem xét thay đổi mã của mình để dễ kiểm tra hơn. Điều này làm cho đơn vị của bạn kiểm tra người tiêu dùng thực tế đầu tiên của mã của bạn - bạn đang thử nghiệm giao diện cho mã của mình bằng cách viết thử nghiệm.
Bằng cách thay đổi giao diện của bạn để dễ kiểm tra hơn, bạn sẽ thấy mình tôn trọng tốt hơn các nguyên tắc hướng đối tượng "gắn kết chặt chẽ" và "khớp nối lỏng lẻo".
Kiểm tra đơn vị không chỉ là về các thử nghiệm. Viết bài kiểm tra đơn vị thực sự cải thiện thiết kế của bạn. Đi xa hơn một chút trên con đường, và bạn kết thúc với Test Driven Development.
Chúc may mắn!
Nguồn
2010-08-12 04:57:44
Nó thực sự là một chút của một tình huống gà và trứng. Bạn không thể viết các bài kiểm tra đơn vị tốt mà không có mã được thiết kế tốt (có thể kiểm chứng). Bạn không thể thiết kế mã tốt (có thể kiểm tra được) mà không bị đâm vào kiểm tra đơn vị. –
+1, đặc biệt là 'buộc các nguyên tắc đó vào mã của bạn'. Trong thực tế, tôi đã từng đọc một bài báo cho rằng viết mã để dễ dàng kiểm tra đơn vị thực sự giảm tỷ lệ lỗi nhiều hơn so với thực sự thực hiện các bài kiểm tra! Hành động bao thanh toán mã của bạn thành các đơn vị có thể kiểm tra dễ dàng làm cho độ chính xác rõ ràng hơn và giảm nguy cơ lỗi. Suy nghĩ về cách bạn sẽ kiểm tra một số mã khiến bạn viết nó dưới dạng mô đun hơn. Tôi đã chắc chắn nhận thấy rằng trong mã của tôi. Đột nhiên chế nhạo và tiêm phụ thuộc tất cả rơi vào vị trí. –