2017-01-28 17 views
5

tóm tắt ngắn về vấn đề:Resteasy-Xuân: ví dụ ứng dụng không chính xác nạp trong quá trình thử nghiệm với nhiều trường hợp chạy

Tôi đã viết một giao diện REST HTTP đơn giản, được xây dựng với mùa xuân Boot, mà trả về một phản ứng văn bản đơn giản khi gọi GET /app , dựa trên việc thực hiện các ClientInterface, trong đó có 2. Các khả năng REST được thực hiện bằng cách sử dụng JAX-RS, được cung cấp bởi resteasy thông qua các RestEasy-SpringBoot library.

Tôi cũng đã viết 3 bài kiểm tra, trong đó thứ 3 thất bại vì phản hồi đến từ lần triển khai thứ hai ClientInterface thay vì triển khai đầu tiên, bởi vì (tôi giả định) Hiếm khi đang trộn các phiên bản ứng dụng và do đó bối cảnh ứng dụng mùa xuân không chính xác được tải, với đậu không chính xác.

LƯU Ý: bạn có thể tìm thấy các ứng dụng mẫu here, trong đó bao gồm các tài liệu cũng

Hãy dành một cái nhìn tại các mã nguồn để có được một bức tranh rõ ràng. Nó sẽ chiếm quá nhiều không gian để dán vào mã.

Thông tin chi tiết:

Có 2 triển khai của ClientInterface đó cung cấp phản hồi được đưa ra bởi nguồn REST. Chúng được chuyển sang sử dụng cấu hình client-impl-two. Nếu hồ sơ không có mặt, thì việc triển khai đầu tiên được sử dụng, nếu nó hiện diện, thứ hai được sử dụng.

Các đầu tiênthứ ba thử nghiệm mong đợi phản ứng từ việc thực hiện đầu tiên, và thứ hai kiểm tra hy vọng câu trả lời từ việc thực hiện giây, bởi vì nó được sử dụng hồ sơ cá nhân client-two-impl.

Khi tôi chạy thử nghiệm bằng cách sử dụng tích hợp JUnit từ IntelliJ, là thứ ba không: enter image description here enter image description here

Bạn sẽ nhận thấy các bài kiểm tra được đặt tên như vậy mà nó thực thi một trật tự nhất định thực hiện, đó là xứng đáng bởi vì thử nghiệm thứ ba chỉ thất bại nếu nó được thực hiện SAU lần thứ hai. Và nó không thành công vì nó nhận được phản hồi từ lần thực hiện ClientInterface thứ hai, mặc dù thử nghiệm thứ ba KHÔNG sử dụng cấu hình client-impl-two.

Những gì tôi đã làm/phát hiện cho đến nay:

  • đôi khi, chạy ./mvnw clean test cũng có kết quả báo lỗi tương tự, nhưng tôi đã không thể cung cấp một ví dụ tái sản xuất
  • bối cảnh mùa xuân Ứng dụng được tải chính xác bởi Spring/Spring Boot
  • Khởi động mùa xuân một cách chính xác bơm số cổng và ứng dụng khách còn lại trong các thử nghiệm luôn gọi phiên bản REST mà chúng được yêu cầu là
  • chỉ khi nào Resteasy đảm nhận yêu cầu, bằng cách nào đó tải lên phiên bản ứng dụng không chính xác và do đó bối cảnh ứng dụng mùa xuân không chính xác được sử dụng, đó là lý do tại sao nó trả lời sai
    • điều này tôi đã tìm ra giữ một breakpoint trong SpringResourceFactory.createResource() nơi nó chỉ querynig các beanFactory cho đậu tài nguyên, và kêu gọi beanFactory.getBean(ClientInterface.class) để xem cái nào thực hiện đi lên, và đó là một sai cho kỳ thi thứ ba
  • trong kiểm tra, có nhiều hơn một thể hiện của ứng dụng đang chạy, mỗi ứng dụng của nó là po rt, mà tôi giả định có liên quan đến vấn đề
  • có một chi nhánh khác, jersey-instead-of-resteasy trong đó Jersey được sử dụng như triển khai JAX-RS và nơi thử nghiệm thành công cho dù chúng có chạy với IntelliJ hay Maven không
  • có một DebugFilter mà tôi kiểm tra bối cảnh ứng dụng mùa xuân trông như thế nào trước khi yêu cầu được thực hiện bởi servlet Resteasy, và nó luôn luôn đúng (thực hiện chính xác ClientInterface được tải), bất kể thử nghiệm như thế nào được thực thi
    • chỉ khi chạy thử nghiệm thứ ba và khi yêu cầu đạt đến Resteasy, trường hợp ứng dụng không chính xác được tải, như được lưu ý trong một trong những điểm nêu trên

Dựa trên những điểm nêu trên, tôi có một nghi ngờ mạnh mẽ Resteasy có thể là vấn đề.

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

1

Tôi đã sửa lỗi này một chút và tôi tin rằng lỗi xảy ra do lỗi trong bộ khởi động resteasy-spring-boot. Tôi vừa tạo ra một vấn đề về github và cung cấp một PR [2] để sửa lỗi và thực hiện kiểm tra của bạn. Tôi cũng đang bình luận về [3]. Kudo cho mô tả và tái tạo tuyệt vời.

  1. https://github.com/paypal/resteasy-spring-boot/issues/51
  2. https://github.com/paypal/resteasy-spring-boot/pull/52
  3. https://issues.jboss.org/browse/RESTEASY-1595
+0

Tôi đã kiểm tra các giải pháp cung cấp và nó hoạt động! Tôi sẽ trao tiền thưởng ngay khi Stackoverflow cho phép tôi :)) –

+1

Xin chào. Gabriel cảm ơn vì đã báo cáo vấn đề. Và @AlessioSoldano cảm ơn vì đã sửa nó. Tôi sẽ phát hành một phiên bản khởi động RESTEasy Spring Boot mới với bản sửa lỗi. – Fabio

+2

Phiên bản 2.2.2-RELEASE vừa được phát hành với bản sửa lỗi. – Fabio

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