Trong hầu hết các ứng dụng của tôi, tôi có một đối tượng "cấu hình" đơn hoặc tĩnh, chịu trách nhiệm đọc các cài đặt khác nhau từ đĩa. Hầu như tất cả các lớp sử dụng nó, cho các mục đích khác nhau. Về cơ bản, nó chỉ là một bảng băm của các cặp tên / giá trị. Nó chỉ đọc, vì vậy tôi đã không quá quan tâm đến thực tế là tôi có quá nhiều trạng thái toàn cầu. Nhưng bây giờ khi tôi bắt đầu thử nghiệm đơn vị, nó bắt đầu trở thành một vấn đề.
Một vấn đề là bạn thường không muốn kiểm tra với cùng cấu hình mà bạn chạy cùng. Có một vài giải pháp cho vấn đề này:
- Cung cấp cho đối tượng cấu hình một setter CHỈ được sử dụng để thử nghiệm, do đó bạn có thể vượt qua trong các cài đặt khác nhau.
- Tiếp tục sử dụng một đối tượng cấu hình duy nhất, nhưng thay đổi nó từ một cá thể thành một cá thể mà bạn đi khắp nơi cần thiết. Sau đó, bạn có thể xây dựng nó một lần trong ứng dụng của mình và một lần trong các thử nghiệm của mình với các cài đặt khác nhau.
Nhưng dù bằng cách nào, bạn vẫn gặp phải vấn đề thứ hai: hầu như bất kỳ lớp nào cũng có thể sử dụng đối tượng cấu hình. Vì vậy, trong một bài kiểm tra, bạn cần thiết lập cấu hình cho lớp đang được kiểm tra, nhưng cũng TẤT CẢ các phụ thuộc của nó. Điều này có thể làm cho mã thử nghiệm của bạn xấu xí.
Tôi bắt đầu đi đến kết luận rằng loại đối tượng cấu hình này là một ý tưởng tồi. Bạn nghĩ sao? Một số lựa chọn thay thế là gì? Và làm thế nào để bạn bắt đầu tái cấu trúc một ứng dụng sử dụng cấu hình ở mọi nơi?