2010-08-02 46 views
7

Im phát triển với Grails. Kể từ khi khuôn khổ sẽ bootstrap dữ liệu và một bối cảnh mùa xuân đầy đủ flushed ra, tôi thấy rằng tôi viết rất nhiều bài kiểm tra tích hợp cho các dịch vụ. Hãy để tôi nói lại rằng: Tôi thấy tôi viết không có bài kiểm tra đơn vị cho các dịch vụ, chỉ thử nghiệm tích hợp. Đây có phải là một ý tưởng tồi không? Nhược điểm duy nhất tôi thấy là các thử nghiệm của tôi mất nhiều thời gian hơn để chạy.Tích hợp vs Thử nghiệm Đơn vị

Tôi sử dụng thử nghiệm đơn vị trên bộ điều khiển, như trong bộ điều khiển tôi đang thử nghiệm các luồng ứng dụng khác nhau, loại kết quả, logic chuyển hướng, v.v. Điều này có vẻ là một sự phá vỡ từ các thử nghiệm J2EE truyền thống, nơi mà hầu hết các bài kiểm tra đơn vị được viết.

chỉnh sửa rõ ràng, Im không viết các bài kiểm tra tích hợp vì mã quá phức tạp chỉ các bài kiểm tra tích hợp sẽ thực hiện. Im viết bài kiểm tra tích hợp bởi vì nó dễ dàng hơn để kiểm tra tất cả mọi thứ với nhau, kể từ khi khuôn khổ cung cấp cho bạn rất nhiều. Tôi làm một số điều nhất định, như thể một dịch vụ hợp tác với acegi authenticationService, tôi giả sử điều đó. Tôi cũng thử bất cứ lúc nào chúng ta tương tác với một webservice, bởi vì bạn phải để có được một thử nghiệm chạy mà không cần thiết lập đặc biệt.

+4

Kiểm tra tích hợp có thể dễ vỡ hơn kiểm tra đơn vị. Nếu bạn thấy mình viết hầu hết các bài kiểm tra tích hợp, hãy xem xét tái cấu trúc dự án của bạn để nó có thể được kiểm tra đơn vị dễ dàng hơn. Nếu mã của bạn được viết sao cho nó có thể kiểm tra được, bạn có thể thấy rằng các bài kiểm tra đơn vị dễ viết hơn các bài kiểm tra tích hợp, và ổn định hơn (ít apt để phá vỡ). Kiểm thử tích hợp là tốt để kiểm tra tương tác giữa các thành phần hệ thống, nhưng chúng không phải lúc nào cũng cung cấp mức độ bao phủ mã đầy đủ, vì vậy chúng không thay thế cho các kiểm thử đơn vị. –

Trả lời

11

Tôi thấy rõ xu hướng hướng tới các bài kiểm tra chức năng và ít bài kiểm tra đơn vị hơn, đặc biệt đối với các thành phần được kết nối chặt chẽ với mức logic thấp. Nếu tôi thực hiện một thuật toán phức tạp trong một lớp cụ thể, tôi thường sẽ viết các bài kiểm tra đơn vị cho nó, nhưng nếu sự phức tạp là do tích hợp với các thành phần khác (thường là trường hợp), thì các bài kiểm tra đơn vị không đáng để gặp rắc rối.

0

Bạn có thể sử dụng khung giả để cô lập các phần khác nhau của dịch vụ của bạn để thử nghiệm riêng lẻ. Thay vì dựa vào bối cảnh mùa xuân lớn, trực tiếp khởi tạo lớp dịch vụ của bạn và điền vào các phụ thuộc không liên quan trực tiếp đến thử nghiệm với mocks. Bạn có thể cần một chút refactoring để decouple phụ thuộc của bạn, nhưng nó thường sẽ là tốt nhất. Điều này có thể dẫn đến việc viết các bài kiểm tra nhỏ hơn và nhỏ hơn thay vì dựa vào một vài bài kiểm tra tích hợp lớn.

Tôi đang ở trong tình huống tương tự, nơi nhiều thử nghiệm được thiết lập thực sự là các thử nghiệm tích hợp và có thể khó khăn, nhưng không phải là không thể, để thay đổi điều này trong tương lai.

2

Nói chung, biện pháp quan trọng là phạm vi mã.

Có thể thuận lợi để thực hiện các kiểm tra tích hợp nếu giao diện toàn cầu ổn định hơn (ít có thể thay đổi).

0

Bạn nên kiểm tra càng sớm càng tốt, vì bạn muốn lỗi hiển thị càng sớm càng tốt, lý tưởng trong khi mã của chúng tôi vẫn nằm dưới sự kiểm soát của bạn. Sau đó, một lỗi được phát hiện càng cao thì chi phí sửa đổi sẽ càng cao.

Nếu bạn đang hiển thị logic không tầm thường, bạn nên kiểm tra logic của các đường dẫn quyết định chính với các bài kiểm tra đơn vị và tiếp xúc logic đó và tương tác với phụ thuộc bên ngoài trong các bài kiểm tra tích hợp.

Nếu bạn là một nhà phát triển duy nhất hoặc làm việc trong một nhóm nhỏ, đôi khi rất khó để thấy sự khác biệt giữa các bài kiểm tra đơn vị và tích hợp. Nếu bạn đang ở trong một môi trường mà nhiều đội đang làm việc trên một sản phẩm, giả định là logic bên trong mã của bạn đã được xác minh (kiểm thử đơn vị) và bây giờ bạn muốn xem các mô-đun chơi với nhau như thế nào (kiểm thử tích hợp) .

Đây không phải là một mô hình tốt để tải quá nhiều vào bài kiểm tra tích hợp, vì bạn đang trì hoãn thử nghiệm cho giai đoạn sau trong dự án hoặc môi trường phát triển của mình, và sớm hay muộn bạn sẽ thấy rằng bạn đang phát hiện lỗi một lần mã đã rời khỏi bàn của bạn. Điều đó sẽ có nghĩa là giữ toàn bộ và có thể phát hành sản phẩm trong khi bạn sửa chữa một cái gì đó bạn có thể và nên đã phát hiện trước đó.

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