2012-07-06 41 views
6

theo như tôi biết Visual Studio 2012 sẽ không hỗ trợ Private Accessors. Bạn có thể cho tôi một số thông tin về các lựa chọn thay thế có thể không? PrivateObject.Invoke() không phải là giải pháp tốt nhất cho tôi.Accessors riêng trong Visual Studio 2012

Cảm ơn bạn trước!

Trả lời

7

Đánh dấu các thành viên của bạn là "nội bộ" và sử dụng thuộc tính InternalsVisibleTo. Đơn giản để sử dụng và không có vấn đề an toàn loại.

+0

Tôi đã thực hiện theo cách này trước khi các bộ phận phụ trợ Privat được giới thiệu. Thanx! – llasarov

+0

Tôi thấy nó thú vị mà nhiều người trong số các.NET Framework hội đồng hiển thị InternalsVisibleTo thuộc tính trong Reflector. – bryanbcook

+0

Dường như có vấn đề với khung Fakes. Bạn không thể shim lớp nội bộ, ngay cả với InternalsVisibleTo thiết lập chính xác. PrivateObject.Invoke cũng không thực sự là một lựa chọn. Đáng buồn thay, trong việc loại bỏ hỗ trợ cho người truy cập, họ đã loại bỏ một cách có thể hoạt động để giảm bớt một lớp nội bộ. – Finster

0

Có thể bài đăng này Home-made Private Accessor for Visual Studio 2012+ sẽ giúp bạn tạo Trình truy cập riêng của riêng bạn.

Kính trọng,

Stefan

+2

Tìm thấy gợi ý cho công cụ dòng lệnh Publicize.exe (http://msdn.microsoft.com/en-us/library/dd569957%28v=vs.100%29.aspx) bởi Axel Mayer trong diễn đàn MSDN (http: //social.msdn.microsoft.com/Forums/en-US/015e1ac7-acf3-4d83-ae0c-734c8957cde4/how-to-create-private-accessors-in-vs-2012?forum=vsunittest). Tìm thấy nó trong VS 2012 và VS 2013 (Ultimate). Làm việc cho .NET 4.0 và .NET 4.5, nhưng không phải cho một ứng dụng Windows Store. Xem% Program Files (x86)% \ Microsoft Visual Studio 11.0 \ Common7 \ IDE. Công cụ tạo một dll có thể được sử dụng bởi dự án thử nghiệm đơn vị của bạn. Tốt hơn là viết cho người truy cập ;-) – Stefan

0

tôi bắt đầu sử dụng động cá nhân accessor tính năng mà là một phần của gói NuGet Chaining Assertion for MSTest và tôi khá hài lòng với nó. Một trong những mất rất nhiều đánh máy nhưng ít nhất là cú pháp vẫn có thể đọc được. Tính năng này hoạt động với tính năng động. Ngoài ra còn có các gói cho các khuôn khổ thử nghiệm khác. Mã kiểm tra trông giống như sau:

var target = CreateMyObjectUnderTest(); 
dynamic dynamicTarget = target.AsDynamic(); 
Assert.AreEqual("abc", dynamicTarget.MyPrivateProperty); 
Assert.AreEqual("xyz", dynamicTarget.PrivateMethod(123)); 
Các vấn đề liên quan