2015-08-26 15 views
8

Spring có 2 thiết lập cho MockMvc:MockMvc của Spring có được sử dụng cho thử nghiệm đơn vị hoặc thử nghiệm tích hợp không?

  1. độc lập thiết lập
  2. WebApplicationContext thiết lập

Nói chung những loại thử nghiệm được sử dụng cho MockMvc? Đơn vị hoặc tích hợp? hoặc cả hai?

Tôi có quyền nói rằng sử dụng thiết lập độc lập (chạy bên ngoài ngữ cảnh ứng dụng của Spring) cho phép bạn viết các bài kiểm tra đơn vị và với thiết lập WebApplicationContext bạn có thể viết các bài kiểm tra tích hợp không?

Trả lời

24

Cả hai biểu mẫu thực tế là kiểm tra tích hợp vì bạn đang thử nghiệm tích hợp mã của bạn với Spring DispatcherServlet và cơ sở hạ tầng hỗ trợ. Sự khác biệt nằm ở số lượng cơ sở hạ tầng hỗ trợ được sử dụng đằng sau hậu trường.

Chi tiết được ghi trong sách hướng dẫn tham khảo Spring.

trích đoạn đáng chú ý:

Các "webAppContextSetup" tải cấu hình Spring MVC thực tế kết quả là một thử nghiệm tích hợp hoàn chỉnh hơn. Vì khung công tác TestContext lưu trữ cấu hình Spring đã tải, nó giúp giữ cho các thử nghiệm chạy nhanh ngay cả khi các thử nghiệm khác được thêm vào. Hơn nữa, bạn có thể tiêm dịch vụ giả lập vào bộ điều khiển thông qua cấu hình Spring, theo thứ tự để duy trì sự tập trung vào việc kiểm tra lớp web.

...

Các "standaloneSetup" mặt khác là một chút gần gũi hơn với một đơn vị thử nghiệm. Nó kiểm tra một bộ điều khiển tại một thời điểm, bộ điều khiển có thể được tiêm các phụ thuộc giả lập theo cách thủ công và không liên quan đến việc tải cấu hình Spring xuống . Các thử nghiệm như vậy tập trung nhiều hơn vào phong cách và giúp dễ dàng kiểm tra xem bộ điều khiển nào đang được kiểm tra, cho dù cấu hình Spring MVC cụ thể có cần thiết để hoạt động hay không, v.v.Các "standaloneSetup" cũng là một cách rất thuận tiện để viết các bài kiểm tra đặc biệt để xác minh một số hành vi hoặc để gỡ lỗi một vấn đề.

...

Cũng giống như với hội nhập vs kiểm tra đơn vị, không có đúng hay sai câu trả lời. Sử dụng "standaloneSetup" có nghĩa là cần một số thử nghiệm "webAppContextSetup" bổ sung để xác minh cấu hình Spring MVC . Ngoài ra, bạn có thể quyết định viết tất cả các thử nghiệm với "webAppContextSetup" và luôn kiểm tra cấu hình Spring MVC thực tế.

...

Các tùy chọn được cung cấp trong Spring MVC thử nghiệm là điểm dừng khác nhau trên quy mô từ đơn vị cổ điển để kiểm tra tích hợp đầy đủ. Để chắc chắn không có số nào trong số các tùy chọn trong Kiểm tra MVC mùa xuân là các bài kiểm tra đơn vị cổ điển nhưng chúng là một số ít hơn gần hơn. Ví dụ bạn có thể cách ly lớp dịch vụ với mocks được tiêm vào bộ điều khiển và sau đó bạn đang kiểm tra lớp chỉ qua DispatcherServlet và cấu hình Spring thực tế, giống như bạn có thể kiểm tra lớp cơ sở trong cách ly . Hoặc bạn có thể sử dụng thiết lập độc lập tập trung vào một bộ điều khiển tại một thời điểm và tự cung cấp cấu hình để làm cho nó hoạt động.

Trước tiên, tôi khuyên bạn nên đọc hướng dẫn tham khảo trước khi đăng câu hỏi tại đây. ;)

Kính trọng,

Sam (tác giả của mùa xuân TestContext Khung)

0

Tôi sẽ nói rằng cả hai phương pháp đều dành cho thử nghiệm tích hợp, nhưng độc lập buộc bạn phải xác định bộ điều khiển nào bạn đang thử nghiệm.

WebỨng dụng Thiết lập tiếp theo đang tải toàn bộ ngữ cảnh, do đó bạn không quan tâm đến bộ điều khiển cụ thể phục vụ ví dụ như yêu cầu POST ví dụ /people.

Vì vậy, tôi khuyên bạn nên sử dụng thiết lập WebApplicationContext để thử nghiệm REST API của bạn về mặt giao diện mà ứng dụng cần làm việc. Bạn không vài thử nghiệm với mã thực tế sau đó + bạn đang ghi lại cách ứng dụng sẽ hoạt động.

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