2012-11-26 38 views
8

Vì vậy, vấn đề là tôi có một loạt các lớp bên trong trong hội đồng của tôi được sử dụng bởi lớp tôi muốn kiểm tra. Kể từ khi accessors đã được gỡ bỏ từ VS2012, tôi là tốt với việc sử dụng [InternalsVisibleTo] và hoạt động tuyệt vời ... trừ khi tôi cố gắng shimify các lớp học nội bộ của tôi, họ không nhìn thấy khuôn khổ Fakes. Tôi cũng nên lưu ý rằng lớp mà tôi đang xử lý là một lớp tĩnh với các phương thức tĩnh và tôi không thực sự muốn cấu trúc lại mọi thứ để sử dụng các giao diện (và sử dụng sơ đồ) vì tính kháng trong tổ chức đến mức tái cấu trúc đó.Làm thế nào để mô phỏng/cô lập các lớp học nội bộ trong VS 2012 với các khuôn khổ khuôn khổ Fakes?

Có cách nào để làm cho các thành viên nội bộ này có thể sử dụng được bằng ngữ cảnh shims trong Visual Studio 2012 mà không phải dùng đến giao tiếp (nghĩa đen) mọi thứ không?

Trả lời

20

Trang sau đây mô tả cách làm cho các loại nội bộ hiển thị đối với lắp ráp giả tạo được tạo. http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_internal_types

Mà nói:

Các máy phát điện Fakes mã sẽ tạo ra loại shim và các loại còn sơ khai với nhiều loại mà có thể nhìn thấy lắp ráp Fakes tạo ra. Để làm cho các loại nội bộ của một cụm lắp ráp có thể nhìn thấy thành Hàng giả và lắp ráp thử nghiệm của bạn, hãy thêm các thuộc tính InternalsVisibleToAttribute vào mã lắp ráp được hiển thị để cho phép hiển thị đối với lắp ráp Fakes được tạo ra và đến lắp ráp thử nghiệm.

[assembly: InternalsVisibleTo("FileSystem.Fakes")] 
[assembly: InternalsVisibleTo("FileSystem.Tests")] 

Bạn cũng cần một InternalsVisibleToAttribute cho phép truy cập lắp ráp thử nghiệm của bạn các loại nội từ lắp ráp mục tiêu. Nói cách khác, bạn cần:

[assembly: InternalsVisibleTo("TargetAssembly.Fakes")] 
[assembly: InternalsVisibleTo("TestAssembly")] 
+0

Nó thực sự nói rằng, nhưng khi tôi đã thử điều này, không có giao diện nội bộ nào của tôi hiển thị. Tôi chỉ nhận được sơ khai cho giao diện công cộng. Tôi biết câu hỏi ban đầu là về shims - bạn đã có thể nhận được điều này để làm việc cho stubbing giao diện nội bộ? –

+2

Chúng tôi đang trong quá trình cập nhật trang MSDN. Bạn cũng cần một InternalsVisibleToAttribute để cho phép assembly thử của bạn truy cập các kiểu nội bộ từ assembly đích. Nói cách khác, bạn cần: [assembly: InternalsVisibleTo ("TargetAssembly.Fakes")] [assembly: InternalsVisibleTo ("TestAssembly")] –

+4

lưu ý quan trọng từ trang msdn mà tôi đã bỏ lỡ: 'Khung Fakes sử dụng cùng chìa khóa để ký tất cả assemblies' tạo ra, do đó khóa công khai nếu ký LUÔN nên được 'PublicKey = 0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc' nếu bạn đang đăng thứ! Nó đã cho tôi mãi mãi để bắt này! –