2009-11-29 41 views
26

Tôi tự hỏi, làm thế nào để các bạn thử nghiệm đơn vị trong CakePHP? Làm thế nào để bạn kết hợp các bài kiểm tra trong các dự án? Bạn thử nghiệm những phần nào của dự án? Làm thế nào để bạn quyết định các bộ phận sẽ được kiểm tra đơn vị? Các bạn vẫn có thể hoàn thành công việc trước thời hạn?Thử nghiệm đơn vị trong CakePHP?

Trả lời

39

Tôi tự hỏi, làm cách nào các bạn kiểm tra đơn vị trong CakePHP? Làm thế nào để bạn kết hợp các thử nghiệm trong các dự án?

Tôi thường sử dụng cài đặt đơn giản nhất được sử dụng bởi Cake Core. Tôi thiết lập một tập tin thử nghiệm cho mỗi bộ điều khiển và mô hình. Tôi thường kiểm tra đầu ra của người trợ giúp/các thành phần/hành vi nếu mã có các tùy chọn phức tạp hoặc trình trợ giúp có một đầu ra phần lớn biến đổi. Tôi thấy phạm vi phủ sóng của tôi là khoảng 65-75% và mức độ bao phủ thấp như vậy với các bài kiểm tra của tôi (65% tập hợp các tệp có giới hạn khá yếu) Tôi phát hiện hoặc sửa nhiều lỗi hơn thông qua các bài kiểm tra so với cố định chính xác mà không cần.

Bạn cần thử nghiệm các phần nào của dự án ? Làm thế nào để bạn quyết định các bộ phận nào được thử nghiệm đơn vị?

Tôi luôn kiểm tra tất cả các chức năng của Model. Tìm kiếm tùy chỉnh, bộ kết quả được phân trang, v.v. Tôi kiểm tra chúng cho những điều sau đây. Số kết quả chính xác (từ tìm kiếm trên dữ liệu lịch thi đấu), kết quả chính xác (từ tìm thấy trên dữ liệu lịch thi đấu), độ chính xác của các trường được trả lại, số kết quả được trả lại và tập dữ liệu chính xác cho từng loại tìm kiếm tùy chỉnh. Chỉnh trang đúng nếu tôi đang sử dụng bộ được phân trang trên bất kỳ tìm kiếm, tùy chỉnh hoặc cách khác.

Tôi luôn kiểm tra các chức năng của bộ điều khiển không cho kết quả hiển thị.Là một thói quen, tôi có xu hướng di chuyển tất cả logic không dành riêng cho cài đặt xem vars hoặc chọn chế độ xem để hiển thị cho các chức năng riêng tư/được bảo vệ trong bộ điều khiển hoặc để mô hình cuộc gọi chức năng. Điều này cho phép tôi kiểm tra các hành động của trình điều khiển còn sót lại (những cái có đầu ra xem) trực tiếp. Nếu tôi hiển thị chế độ xem ở tất cả thì các chức năng đó có khả năng hoạt động tốt với bất kỳ vấn đề nào với những gì được hiển thị là tăng thêm ngăn xếp cuộc gọi.

Tôi kiểm tra người trợ giúp về đầu ra của họ với các tùy chọn cụ thể được đặt. Tôi không luôn luôn bao gồm tất cả các hoán vị của mảng tùy chọn nhưng khi hai khóa khác nhau dẫn đến hành vi loại trừ lẫn nhau hoặc tôi có thể kiểm tra các thuộc tính predicatble được bao gồm trong đánh dấu của tôi như là kết quả - tôi thử nghiệm cho các kịch bản đó.

Nếu một thành phần lấy dữ liệu từ đâu đó và thao tác nó, tôi cũng kiểm tra định dạng hoặc trả về dữ liệu trên các hàm thành phần. Tương tự cho hành vi.

Nếu tôi có một lớp tĩnh được sử dụng ở đâu đó, tôi sẽ kiểm tra các hàm trong lớp đó để có kết quả trả về chính xác cũng như tạo ra một số lỗi bắt buộc hoặc điều kiện lỗi cố ý. Đặc biệt nếu một lỗi dẫn đến một chuyển hướng, hoặc dữ liệu được gửi xuống đường ống trong một số hình thức. Nếu thất bại là im lặng hoặc trả về một giá trị mặc định, tôi cũng kiểm tra để chắc chắn rằng nó thực sự đang xảy ra.

Các bạn vẫn có thể đến hoàn thành công việc trước thời hạn không?

Hạn chót vượt qua đầu tiên ở đây luôn hơi "mềm" để kiểm tra và mọi vấn đề nảy sinh. Tôi thấy rằng nếu bạn sử dụng một bút chì cũ và một số giấy vẽ đồ thị hoặc một bảng trắng, bạn có thể dễ dàng tìm ra một bộ kiểm tra cơ bản trước khi bạn thậm chí viết bất kỳ mã nào. Với cách tiếp cận này, bạn có thể tìm thấy một dự án mất thêm 25% thời gian lên phía trước nhưng trong toàn bộ vòng đời của ứng dụng, bạn sẽ dễ dàng tiết kiệm 25% bạn chi tiêu trước bằng cách không còn nhiều vấn đề hơn nữa.


Tôi đã chỉnh sửa này để thêm vào một số liên kết để xem xét cả kỹ thuật thử nghiệm thực tế và cách để hiểu rõ cách chúng kết hợp với nhau.

  1. http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1-2-test-suite
  2. http://book.cakephp.org/view/160/Testing
  3. http://debuggable.com/posts/unit-testing-in-cakephp-part-1---introduction-to-unit-testing:48102610-c5d0-4398-a010-76974834cda3
  4. http://mark-story.com/nodes/view/testing-cakephp-controllers-the-hard-way

Ngoài ra, tôi phải đồng ý và không đồng ý với các devs bánh các bài kiểm tra văn bản. Nó một ý tưởng rất hay để thử nghiệm bất kỳ thứ gì bạn muốn sử dụng lại - có thể là tệp thành phần đơn lẻ hoặc plugin phức tạp - vì bạn sẽ phân phối nó và các thử nghiệm đều hiển thị mã làm việc và là ví dụ tuyệt vời về những gì có thể thực hiện một đoạn mã. Đối với các bộ điều khiển không thử nghiệm vì bạn phải sử dụng các đối tượng giả - đó chỉ là một lý do yếu để không làm một chút công việc phức tạp khi bạn bận tâm với nó trở nên dễ dàng hơn một chút mỗi khi bạn làm điều đó và nó thực sự, thực sự đã cắt giảm tỷ lệ lỗi và cung cấp cho bạn số lượng lớn tăng theo sự hiểu biết của riêng bạn về mã của riêng bạn.

+1

Cảm ơn bạn rất nhiều vì câu trả lời tuyệt vời :) – user133127

+1

chào mừng bạn - Tôi không mong đợi bài đăng này trở nên phổ biến. –

4

Bạn có thể muốn xem this.

Tôi không quen với CakePHP, nhưng tôi thường sử dụng PHPUnit. Tôi sử dụng Netbeans, mà tích hợp PHPUnit khá tốt (Tôi không biết nếu đó là một lựa chọn cho bạn). Có thể chạy các bài kiểm tra đơn vị độc lập với khung web mà bạn sử dụng.

Tôi thường kiểm tra tất cả các kết nối nguồn dữ liệu (toàn bộ lớp truy cập dữ liệu) và đảm bảo rằng tính bền vững hoạt động như mong đợi. Ngoài ra, nếu bạn có bất kỳ logic cụ thể nào trong ứng dụng của mình, hãy kiểm tra số để bạn biết nó thực sự hoạt động. Tôi không có kinh nghiệm lâu trong thử nghiệm, nhưng tôi cho rằng những người khác sẽ đề nghị bạn kiểm tra quan điểm của mình. Cá nhân, tôi sử dụng F5 trong trình duyệt cho điều đó, hehe :). Khi nói đến chức năng AJAX tôi kiểm tra từng bit của nó (yêu cầu đó thực hiện điều đó và/hoặc truy xuất kết quả mong muốn).

Về thời gian/thời hạn, một điều chắc chắn là dự án của bạn sẽ được hưởng lợi từ thử nghiệm. Xác suất vượt quá thời hạn là lớn hơn nhiều khi không sử dụng một số hình thức kiểm tra để đảm bảo rằng các khối xây dựng của ứng dụng của bạn hoạt động như bạn muốn. Giả sử ứng dụng của bạn phát triển lớn hơn (trong hầu hết các trường hợp), bạn không có bất kỳ kiểm tra đơn vị nào và ứng dụng của bạn không thành công. Làm thế nào để bạn biết nơi để gỡ lỗi, và bao nhiêu thời gian hơn bạn sẽ sử dụng tìm kiếm vấn đề? Điều chính cần hiểu là đảm bảo rằng các đoạn mã nhỏ hoạt động thực sự quan trọng khi bạn nhận được nhiều phần nhỏ.

Thời gian viết bài kiểm tra có vẻ không hiệu quả, vì nó không dẫn trực tiếp đến chức năng, nhưng nó đóng một vai trò thực sự quan trọng theo thời gian. Nhìn vào nó như một hình thức bảo hiểm.