2012-07-06 69 views
6

據我所知,Visual Studio 2012將不支持私有訪問器。你能給我一些關於可能的替代方案的信息嗎? PrivateObject.Invoke()不是我最好的解決方案。Visual Studio 2012中的私有訪問器

預先感謝您!

回答

7

將您的成員標記爲「內部」並使用InternalsVisibleTo屬性。使用簡單,沒有類型安全問題。

+0

我在Privat eAccessors推出之前就這樣做了。感謝名單! – llasarov 2012-07-07 14:32:53

+0

我發現有趣的是,許多.NET Framework程序集都在Reflector中顯示InternalsVisibleTo屬性。 – bryanbcook 2012-07-10 14:48:02

+0

它看起來像是一個Fakes框架的問題。即使使用InternalsVisibleTo正確設置,也無法填充內部類。 PrivateObject.Invoke也不是一個真正的選項。可悲的是,在取消對訪問者的支持時,他們刪除了用於填補內部課程的一種方式。 – Finster 2012-11-26 18:35:04

0

也許此帖子Home-made Private Accessor for Visual Studio 2012+將幫助您創建您自己的私人配件。

問候,

斯特凡

+2

在MSDN論壇(http:// www.msdn.microsoft.com/zh-cn/)中,通過Axel Mayer發現命令行工具Publicize.exe(http://msdn.microsoft.com/zh-cn/library/dd569957%28v=vs.100%29.aspx) //social.msdn.microsoft.com/Forums/en-US/015e1ac7-acf3-4d83-ae0c-734c8957cde4/how-to-create-private-accessors-in-vs-2012?forum=vsunittest)。 在VS 2012和VS 2013(Ultimate)中發現它。適用於.NET 4.0和.NET 4.5,但不適用於Windows應用商店應用。查看%Program Files(x86)%\ Microsoft Visual Studio 11.0 \ Common7 \ IDE。 該工具創建一個可供您的單元測試項目使用的dll。比自己寫入訪問器更好;-) – Stefan 2013-11-28 15:21:53

0

我開始使用活力的民營訪問者功能,是NuGet包Chaining Assertion for MSTest的一部分,是我比較滿意的。一個失去了強大的輸入,但至少語法仍然可讀。 這適用於動態功能。還有其他測試框架的軟件包。 測試代碼如下所示:

var target = CreateMyObjectUnderTest(); 
dynamic dynamicTarget = target.AsDynamic(); 
Assert.AreEqual("abc", dynamicTarget.MyPrivateProperty); 
Assert.AreEqual("xyz", dynamicTarget.PrivateMethod(123));