Gần đây tôi đã bắt đầu làm freelancer trong dự án hiện tại của mình. Một trong những thứ mà tôi đã tự ném mình vào, là việc xây dựng Jenkins thất bại (nó đã thất bại bắt đầu từ ngày 8 tháng Tư, một tuần trước khi tôi bắt đầu ở đây).Ngữ cảnh mùa xuân bị bẩn sau mỗi lần kiểm tra tích hợp
Nói chung, bạn có thể thấy một loạt các vấn đề DI trong nhật ký. Điều đầu tiên tôi đã làm, đã nhận được tất cả các bài kiểm tra để làm việc trong cùng một cách, bắt đầu từ bối cảnh ứng dụng tương tự. Họ cũng thực hiện điều "nhại" của riêng họ, điều này dường như không hoạt động chính xác. Sau khi thảo luận với người dẫn đầu, tôi đã đề nghị bắt đầu sử dụng Springockito. (đối với một mô-đun nhất định, họ cần chế nhạo để thử nghiệm tích hợp của họ - lý do kế thừa, không thể thay đổi được)
Dù sao thì, công cụ bắt đầu không thành công sau đó. Rất nhiều đậu đã được chế giễu trong thử nghiệm, chỉ đơn giản là không chế giễu, hoặc không được tìm thấy hoặc bất cứ điều gì. Thông thường, nó sẽ thất bại khi tải ngữ cảnh ứng dụng, nói rằng một hoặc một bean khác bị thiếu.
Tôi đã thử các công cụ khác nhau và các cách tiếp cận khác nhau, nhưng cuối cùng, chỉ điều tôi lo sợ nhất sẽ hoạt động: thêm @DirtiesContext vào mọi thử nghiệm đơn lẻ. Bây giờ, việc xây dựng maven đang bắt đầu chuyển sang màu xanh một lần nữa, kiểm tra bắt đầu làm những gì họ có nghĩa vụ phải làm. Nhưng tôi tải lại bối cảnh Spring mỗi lần, mọi thứ đều mất thời gian - tất cả đều là tương đối, vì ngữ cảnh được tải trong khoảng 1 - 2 giây.
Một lưu ý phụ cho câu chuyện này là họ đã nâng cấp lên Hibernate 4 và do đó đến Mùa xuân 3.2. Trước đây, họ đã sử dụng phiên bản cũ của Spring 3. Tất cả các thử nghiệm đều hoạt động trở lại sau đó và điều @DirtiesContext là không cần thiết.
Bây giờ, điều làm tôi lo lắng nhất, là tôi không thể nghĩ ngay về lời giải thích cho hành vi kỳ lạ này. Nó gần như có vẻ như bối cảnh Springs là bẩn, chỉ đơn giản bằng cách tung ra một thử nghiệm trong đó sử dụng @Autowired đậu. Không phải tất cả các bài kiểm tra đều sử dụng Mocks, vì vậy nó không thể như vậy. Âm thanh này có quen thuộc với bất kỳ ai không? Có ai có cùng trải nghiệm với thử nghiệm tích hợp với (phiên bản mới nhất của) Spring không?
Trên Stackoverflow, tôi đã tìm thấy vé này: How can a test 'dirty' a spring application context? Có vẻ như tổng hợp khá nhiều hành vi tôi thấy, nhưng quan trọng là chúng tôi đang tự động dịch vụ/kho/... và rằng chúng tôi không có bất kỳ người định cư nào trên những lớp đó.
Mọi suy nghĩ?
Cảm ơn!
Tôi không sử dụng ngữ cảnh thử nghiệm vào mùa xuân mà cực kỳ (chưa) vì tất cả các bài kiểm tra của tôi không hướng đến ngữ cảnh. Tôi thậm chí không biết rằng thats có thể;) Mùa xuân 3.2, Hibernate 4.2. Nó có thể được rằng có một số postprocessors đá trong? Một số định nghĩa bean đang thay đổi ở giữa hai phần khởi động và autowiring là giải quyết cho đậu mới và do đó dấu bẩn? –
Có thể. Tôi sẽ giữ cho các nhà hậu xử lý trong tâm trí, cảm ơn! Ngay bây giờ, tôi đang cố gắng tìm ra trình tải cho ngữ cảnh. Khi bạn đang sử dụng Springockito, bạn cần có SpringockitoContextLoader.class làm trình tải ngữ cảnh - tuy nhiên, tôi không sử dụng trình tải ngữ cảnh đó ở mọi nơi, có thể là giải thích. Nó sẽ giải thích lý do tại sao mùa xuân không thể tìm thấy một số loại đậu mà khung đã được tải trong một thử nghiệm trước đó. – gjoris