Thuộc tính "InternalsVisibleTo" là chìa khóa cho bất kỳ loại "hộp trắng" nào (thuật ngữ của thập kỷ, tôi đoán) thử nghiệm cho .Net. Nó có thể được đặt trong bất kỳ tệp c # nào có thuộc tính "lắp ráp" ở mặt trước. Lưu ý rằng MS DOCs nói rằng tên lắp ráp phải đủ điều kiện bằng mã thông báo khóa công khai, nếu nó được ký. Đôi khi điều đó không hoạt động và người ta phải sử dụng khóa công khai đầy đủ ở vị trí của nó. Truy cập vào nội bộ là chìa khóa để kiểm tra các hệ thống đồng thời và trong nhiều tình huống khác. Xem https://www.amazon.com/xUnit-Test-Potypes-Refactoring-Code/dp/0131495054 . Trong cuốn sách này, Meszaros mô tả một loạt các phong cách mã hóa về cơ bản tạo thành cách tiếp cận "Thiết kế để thử nghiệm" để phát triển chương trình. Ít nhất đó là cách tôi đã sử dụng nó trong nhiều năm qua.
THÊM: Xin lỗi, tôi đã không ở đây một thời gian. Một cách tiếp cận được gọi là phương pháp "phân lớp thử nghiệm" của Meszaros. Một lần nữa, người ta phải sử dụng "internalsvisableto" để truy cập vào các phần bên trong của lớp cơ sở. Đây là một giải pháp tuyệt vời, nhưng nó không hoạt động đối với các lớp kín. Khi tôi dạy "Thiết kế để kiểm tra", tôi đề nghị rằng đó là một trong những điều bắt buộc phải được "tiền chế" vào các lớp cơ sở để cung cấp khả năng kiểm tra. Nó phải trở thành gần như một điều văn hóa. Thiết kế một lớp cơ sở "cơ sở" không được tiết lộ. Gọi nó là UnsealsBaseClass hoặc một cái gì đó dễ nhận biết. Đây là lớp được phân lớp để kiểm tra. Nó cũng được phân lớp để xây dựng lớp niêm phong sản xuất, thường chỉ khác nhau trong các hàm tạo mà nó trưng ra. Tôi làm việc trong ngành công nghiệp hạt nhân và các yêu cầu thử nghiệm được thực hiện RẤT nghiêm túc. Vì vậy, tôi phải suy nghĩ về những điều này mọi lúc. Nhân tiện, việc để lại các móc kiểm tra trong mã sản xuất không được coi là một vấn đề trong lĩnh vực của chúng tôi, miễn là chúng là "nội bộ" trong triển khai .Net. Sự phân nhánh của KHÔNG kiểm tra một cái gì đó có thể khá sâu sắc.