IT박스

VS2017 .Net 표준 라이브러리의 단위 테스트 내부 메소드

itboxs 2020. 7. 10. 08:11
반응형

VS2017 .Net 표준 라이브러리의 단위 테스트 내부 메소드


현재 .Net Standard 1.6 라이브러리를 만들어 최신 Visual Studio 2017 릴리스 후보를 가지고 놀고 있습니다. xUnit을 사용하여 코드를 단위 테스트하고 VS2017에서 여전히 내부 메소드를 테스트 할 수 있는지 궁금합니다.

VS2015의 모든 AssemblyInfo.cs 클래스를 사용하면 지정된 프로젝트에서 내부 메서드를 볼 수 있습니다.

[assembly:InternalsVisibleTo("MyTests")]

VS2017 .Net Standard 프로젝트에 AssemblyInfo.cs 클래스가 없으므로 내부 메소드를 여전히 단위 테스트 할 수 있는지 궁금합니다.


.NET 문서에InternalsVisibleToAttribute 따르면 :

이 속성은 어셈블리 수준에서 적용됩니다. 즉, 소스 코드 파일의 시작 부분에 포함되거나 Visual Studio 프로젝트의 AssemblyInfo 파일에 포함될 수 있습니다.

즉, 임의로 이름이 지정된 .cs 파일에 파일을 배치하면 정상적으로 작동합니다.

// some .cs file included in your project
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo("MyTests")]

첫 번째 대답은 완벽하게 괜찮습니다. 여전히 원본에서이 작업을 수행하려는 경우 언제든지 AssemblyInfo파일을 자동 생성하지 않고 수동으로 추가하도록 선택할 수 있습니다.

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

자세한 정보 : https://stackoverflow.com/a/47075759/869033


"InternalsVisibleTo"속성은 .Net에 대한 모든 종류의 "화이트 박스"(10 년이라는 용어) 테스트의 핵심입니다. 전면에 "assembly"속성이있는 c # 파일에 배치 할 수 있습니다. MS DOC는 어셈블리 이름이 공개 키 토큰 (서명 된 경우)에 의해 규정되어야한다고 말합니다. 때로는 작동하지 않으며 대신 전체 공개 키를 사용해야합니다. 내부 시스템에 대한 액세스는 동시 시스템 및 기타 여러 상황을 테스트하는 데 중요합니다. https://www.amazon.com/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054를 참조 하십시오 . 이 책에서 Meszaros는 기본적으로 프로그램 개발에 대한 "Design For Test"접근 방식을 구성하는 다양한 코딩 스타일을 설명합니다. 적어도 그것이 내가 수년 동안 그것을 사용한 방식입니다.


또 다른 방법은 대상 프로젝트 내에서 테스트해야하는 클래스 (예 : MyFoo)의 공개 메소드 및 결과가없는 '래퍼'TestMyFoo 공개 클래스를 사용하는 것입니다. 이 공용 메소드는 단순히 테스트하려는 기본 클래스를 호출합니다.

대상 프로젝트에 테스트 훅을 제공하면 '이상적이지 않습니다'. 그러나 진단 포트가있는 현대의 신뢰할 수있는 차량과 JTAG 연결이있는 현대의 신뢰할 수있는 전자 제품을 고려하십시오. 그러나 진단 포트를 사용하여 자동차를 운전할만큼 바보 같은 사람은 없습니다.

참고 URL : https://stackoverflow.com/questions/42235401/unit-testing-internal-methods-in-vs2017-net-standard-library

반응형