2012-07-06 1 views
6

내가 아는 한 Visual Studio 2012는 비공개 액세스를 지원하지 않습니다. 가능한 대안에 대한 정보를 좀 주시겠습니까? PrivateObject.Invoke()는 나를위한 최상의 솔루션이 아닙니다.Visual Studio 2012의 개인 액세서리

미리 감사드립니다.

답변

7

회원을 "내부"로 표시하고 InternalsVisibleTo 특성을 사용하십시오. 사용하기 쉽고 유형 안전 문제가 없습니다.

+0

Privat eAccessors가 도입되기 전에이 방법을 사용했습니다. 고맙습니다! – llasarov

+0

많은 .NET Framework 어셈블리가 Reflector에서 InternalsVisibleTo 특성을 표시한다는 점이 흥미 롭습니다. – bryanbcook

+0

Fakes 프레임 워크에 문제가있는 것 같습니다. InternalsVisibleTo를 올바르게 설정해도 내부 클래스를 심 볼 수 없습니다. PrivateObject.Invoke는 실제로 옵션도 아닙니다. 슬프게도 접근 자에 대한 지원을 제거 할 때 내부 클래스를 shimming하는 데 사용할 수있는 한 가지 방법을 제거했습니다. – Finster

0

아마도이 게시물 Home-made Private Accessor for Visual Studio 2012+은 나만의 비공개 액세서를 만드는 데 도움이됩니다.

감사합니다,

스테판

+2

MSDN 포럼의 Axel Mayer가 제공하는 명령 줄 도구 Publicize.exe (http://msdn.microsoft.com/en-us/library/dd569957%28v=vs.100%29.aspx)에 대한 힌트를 찾았습니다 (http : //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 Store 앱에서는 작동하지 않습니다. % Program Files (x86) % \ Microsoft Visual Studio 11.0 \ Common7 \ IDE를보십시오. 이 도구는 단위 테스트 프로젝트에서 사용할 수있는 dll을 만듭니다. 직접 접근자를 작성하는 것보다 ;-) – Stefan

0

은 내가 nuget 패키지 Chaining Assertion for MSTest의 일부입니다 동적 개인 소품 기능을 사용하기 시작하고 나는 그것으로 오히려 기쁘게 생각합니다. 하나는 강력한 입력을 잃지 만 적어도 구문은 여전히 ​​읽을 수 있습니다. 동적 인 기능과 함께 작동합니다. 다른 테스트 프레임 워크 용 패키지도 있습니다. 테스트 코드는 다음과 같습니다.

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