Tôi có một tệp tài nguyên có một số cài đặt. Tôi có một lớp ResourceLoader tải các cài đặt từ tệp này. Lớp này hiện đang là một lớp singleton háo hức. Ngay khi lớp này tải, nó sẽ đọc các cài đặt từ tệp (đường dẫn tệp được lưu dưới dạng trường không đổi trong lớp khác). Một số trong các cài đặt này không phù hợp cho các bài kiểm tra đơn vị. Ví dụ: tôi có thời gian ngủ của luồng trong tệp này, có thể là hàng giờ cho mã sản xuất nhưng tôi muốn nó là một vài mili giây cho các thử nghiệm đơn vị. Vì vậy, tôi có một tệp tài nguyên thử nghiệm khác có một bộ giá trị khác. Câu hỏi của tôi là làm cách nào để hoán đổi tệp tài nguyên chính với tệp kiểm tra này trong quá trình kiểm tra đơn vị? Dự án là một dự án maven và tôi đang sử dụng testng làm khung thử nghiệm. Đây là một số cách tiếp cận tôi
Sử dụng @B BeforeSuite và sửa đổi biến hằng FilePath để trỏ đến tệp thử nghiệm và sử dụng @AfterSuite để trỏ nó trở lại tệp gốc. Điều này có vẻ như đang hoạt động nhưng tôi nghĩ bởi vì lớp ResourceLoader ngay lập tức được kích hoạt, không có gì đảm bảo rằng phương thức @B BeforeSuite sẽ luôn thực thi trước khi lớp ResourceLoader được tải và do đó các thuộc tính cũ có thể được tải trước khi đường dẫn tệp được thay đổi. Mặc dù hầu hết các trình biên dịch chỉ tải một lớp khi nó được yêu cầu, tôi không chắc đây có phải là một yêu cầu đặc tả java không. Vì vậy, trong lý thuyết, điều này có thể không hoạt động cho tất cả các trình biên dịch java.
Truyền đường dẫn tệp tài nguyên dưới dạng đối số dòng lệnh. Tôi có thể thêm đường dẫn tệp tài nguyên thử nghiệm làm đối số dòng lệnh trong cấu hình Surefire trong pom. Điều này có vẻ hơi quá.
Sử dụng cách tiếp cận trong 1. và làm cho ResourceLoader trở nên lười biếng ngay lập tức. Điều này đảm bảo rằng nếu @B BeforeMethod được gọi trước cuộc gọi đầu tiên tới ResourceLoader.getInstance (). GetProperty (..), ResourceLoader sẽ tải đúng tệp. Điều này có vẻ tốt hơn so với 2 cách tiếp cận đầu tiên nhưng tôi nghĩ rằng việc tạo ra một lớp đơn lẻ lười biếng ngay lập tức làm cho nó trở nên xấu xí vì tôi không thể sử dụng một mô hình đơn giản như biến nó thành một enum và như vậy (ví dụ như trường hợp tức thời háo hức).
Đây có vẻ như là một kịch bản phổ biến, cách phổ biến nhất về nó là gì?