Giả sử bạn đang viết một hàm để kiểm tra xem trang có đạt được URL thích hợp hay không. Trang này có một lệnh "chuẩn" - ví dụ, trong khi một trang có thể đạt được tại stackoverflow.com/questions/123, chúng tôi muốn (vì lý do SEO) để chuyển hướng nó tới stackoverflow.com/questions/123/how-do -i-move-the-turtle-in-logo - và chuyển hướng thực được an toàn chứa trong phương thức riêng của nó (ví dụ: redirectPage ($ url)), nhưng làm thế nào để bạn kiểm tra đúng chức năng gọi nó?Chức năng kiểm tra đơn vị có tác dụng phụ?
Ví dụ, mất chức năng sau:
function checkStub($questionId, $baseUrl, $stub) {
canonicalStub = model->getStub($questionId);
if ($stub != $canonicalStub) {
redirectPage($baseUrl . $canonicalStub);
}
}
Nếu bạn đã kiểm tra đơn vị sự checkStub() chức năng, sẽ không chuyển hướng được theo cách này?
Đây là một phần của vấn đề lớn hơn trong đó một số chức năng dường như quá lớn và rời khỏi lĩnh vực thử nghiệm đơn vị và vào thế giới thử nghiệm tích hợp. Tâm trí của tôi ngay lập tức nghĩ về các bộ định tuyến và bộ điều khiển vì có những loại vấn đề này, vì việc kiểm tra chúng nhất thiết dẫn đến việc tạo ra các trang thay vì chỉ giới hạn trong chức năng riêng của chúng.
Tôi có bị lỗi khi thử nghiệm đơn vị không?
chậm lại ... và suy nghĩ lại những gì được bạn thực sự cố gắng thử nghiệm ở đây ... Nếu bạn loại bỏ các Redirect, các checkStub phương pháp không làm nhiều nên tôi không chắc về bài kiểm tra thực sự ở đây. Thông thường bạn kiểm tra các tác dụng phụ mà một chức năng như vậy gây ra. – Gishu
@gishu: vâng, đó là một ví dụ vô cùng sai lầm sinh ra từ một vấn đề trước đó tôi đã sắp xếp ra .. vấn đề đã được cố định, nhưng ví dụ (chuyển hướng) đã bị mắc kẹt trong đầu của tôi.Tập trung vào phần cuối của câu hỏi - bộ định tuyến, bộ điều khiển - như là thịt thực sự của câu hỏi. Làm cách nào để kiểm tra các hàm có tiêu điểm phần lớn là "tạo ra mọi thứ" nhưng vẫn cần được kiểm tra do thứ tự và logic nội bộ của chúng. Tôi sẽ đi ra ngoài bây giờ và tôi sẽ có khả năng chỉnh sửa địa ngục trong câu hỏi này vào buổi sáng. Hy vọng rằng bạn có thể thấy ý định của tôi bây giờ (nó có thể giúp để biết tôi là thương hiệu mới để thử nghiệm đơn vị). – AgentConundrum
Bạn khá nhiều chỉ nói rằng bạn đang trộn logic với tạo đối tượng, mà làm cho đơn vị thử nghiệm khó khăn. Bạn có thể chia hai mối quan tâm này không? Nếu vậy, viết các bài kiểm tra đơn vị của bạn sẽ khá tầm thường. – strager