2010-02-08 2 views
1

단위 테스트의 경우 개인 메서드를 테스트하지 말아야합니다. 그렇지만 통합 테스트 (MSTest 또는 NUnit 같은 단위 테스트 프레임 워크 사용)에 대해서는 내부 API 호출을 매우 많이 실행하고 싶습니다. 테스트 URL을 사용하여 타사 API 공급 업체가 백엔드를 변경할 때 현재 코드가 작동하는지 확인하십시오.통합 클래스 테스트 개인 클래스 및 메서드

복잡한 시스템 (바보 같은 API에는 수백 개의 매개 변수가 있음)을 감안할 때 API 및 도우미 클래스를 데이터 영역 라이브러리의 내부에 완전히 숨김으로써 API 및 API의 대부분을 숨겼습니다. 저는 공개적으로 사용했기 때문에 이것을 바꾸고 싶지 않습니다. 우리는 이상한 개발자가 프로젝트에 익숙하지 않고 일반적으로 경험이 부족한 개발자가 즉시 웹 사이트 코드에서 직접 api를 호출 할 것이기 때문에 이것을 바꾸고 싶지 않습니다. 클래스를 내부 클래스로 만드는 것은 적어도 추상화 레이어의 시점을 파괴하기 전에 생각해야합니다.

나는 내부 방법을 사용하기 위해 리플렉션 코드를 많이 만들었지 만 너무 잘 작동하지 않고 sphagetti-ish를 얻고 있습니다. 특정 라이브러리에서 메소드를 공개적으로 볼 수있게하는 방법이 있습니까? 테스트 라이브러리가 api를 포함하는 라이브러리의 일부로 취급되도록하는 방법이 있습니까? 이 모범 사례가 있습니까?

+0

사용하는 언어에 따라 라이브러리 클래스의 가시성을 설정하고 라이브러리 클래스의 일부를 파생시킬 수 있습니다. 당신이 보호 된 것을 사용한다고 가정하십시오. –

+0

NUnit과 MSTest에 대한 귀하의 언급에 기반하여, 저는 .NET 기반 언어를 사용하고 있다고 대답했습니다. 틀린 것이 있으면 우리에게 알려주십시오. =) – Rob

+0

.NET C# mix 3.5 (테스트 용)와 2.0 (레이어 코드 용)으로 나뉩니다. 후자의 경우 stage/uat/prod 서버의 업그레이드가 지연되었습니다. – Aquinas

답변

5

InternalsVisibleTo attribute은 여기에있는 귀하의 친구입니다 =) AssemblyInfo.cs에 배치하면 (적어도 평소에 넣어 두었습니다) 내부 메소드를 공개하려는 테스트/다른 어셈블리의 이름을 지정하십시오 다음으로 사용할 수 있습니다. 추가 된 보너스 (적어도 내 마음에)는 Visual Studio의 Intellisense 시스템/컴파일러가 특성과 그 용도를 인식하고 있으며 내부 메서드에 대한 완벽한 인텔리 센스를 제공합니다.

리플렉션과 달리 내부 메소드 서명을 변경할 때마다 컴파일 타임 오류를 제공하지 않고도 심각하게 손상되지 않습니다.

+0

고마워, 그건 매력을했습니다. 내가 그것을 간과하게 사용하는 한, 그것은 나의 코드 양심과 잘 어울린다. 단지 unplesantness는 내 어셈블리가 모두 서명되어 있기 때문에 위의 특성을 사용하려면 내 테스트 어셈블리에도 서명해야합니다. – Aquinas