단위 테스트 목적으로 다른 어셈블리의 클래스에 액세스하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1211707

  •  06-07-2019
  •  | 
  •  

문제

나는 Visual-Studio 2008 방식을 단위 테스트하는 데 뛰어 들고 있으며, 교차 조립을 달성하는 가장 좋은 방법이 궁금합니다. class 테스트 목적으로 액세스.

기본적으로 하나의 솔루션에 두 개의 프로젝트가 있습니다.

  1. myproject (c#)
  2. MyProjectTests (C# 테스트 프로젝트)

MyProject의 모든 것은 현재 기본 접근성을 가지고 있습니다. 내가 올바르게 기억한다면 모든 것이 효과적으로 있음을 의미합니다. internal. 나는 주로 테스트를 찾고 있습니다 class 레벨이지만 몇 개가 있습니다 delegates 관련된.

미래에는 언젠가 외부 API가있을 것이지만, 나는 완료하는 방법의 약 20% (적어도 종이에)이 테스트되지 않은 코어 위에 더 많은 코드를 레이어링하는 데 꽤 많은 것을 얻고 있습니다. 따라서 앱이 전통적인 (읽기 : 나쁜 및/또는 게으른) 기능 테스트를 위해 충분히 완료되기 전에 지금 몇 가지 테스트를 수행하고자합니다.

정답 외에도 솔루션의 예를 크게 높이 평가할 것입니다.

도움이 되었습니까?

해결책

어셈블리 레벨 속성을 사용할 수 있습니다 InternalSvisibleToattribute 이것을 달성하기 위해.

추가하다

[assembly:InternalsVisibleTo("MyProjectTests")]

MyProject 어셈블리에서 AssemblyInfo.cs에.

다른 팁

메인 프로젝트의 AssemblyInfo.cs에 속성을 추가하여 내부 방법을 테스트하여 이름의 어셈블리에 내부 메소드에 액세스 할 수 있습니다.

어셈블리 : InternalSvisIbleto ( "MyProjectTestSnamespace.myProjectTests")

추가 정보입니다 여기

추가해야합니다

[assembly:InternalsVisibleTo("Unit.Tests.Assembly")] 

"myProject (c#)"의 AssemblyInfo.cs에. 그런 다음 테스트에서 테스트를위한 내부 방법에 액세스 할 수 있습니다.

당신이 필요한 것 같습니다 InternalSvisibleToattribute

그러나이 접근법에 대해 권장합니다. 공개 인터페이스 또는 API를 통해 내부 클래스를 테스트하십시오.

하지만 [InternalsVisibleTo] 가장 현명한 방법 IMO는 다음과 같은 다른 방법이 있습니다.

  • 사용하여 반사

     var method = instance.GetType().GetMethod(
        methodName, BindingFlags.NonPublic | BindingFlags.Instance, 
        null, paramTypeArray, null);
     return method.Invoke(instance, parameters);
    

이 접근법의 문제점은 메소드 이름 또는 서명이 변경되면 단위 테스트가 실행 시간에 실패하는 반면 [InternalsVisibleTo] 컴파일 시간 에이 중단 변화를 쉽게 선택했을 것입니다.

나는 이것을 찾았다 https://msdn.microsoft.com/en-us/library/hh598957.aspx 누군가를 도울 수 있기를 바랍니다.

요약:

  • 단위 테스트 프로젝트에서 테스트중인 코드에 대한 참조를 추가하십시오. 동일한 솔루션에서 코드 프로젝트에 대한 참조를 만드는 방법은 다음과 같습니다.
  • Solution Explorer에서 프로젝트를 선택하십시오.
  • 프로젝트 메뉴에서 참조 추가를 선택하십시오 ....
  • 참조 관리자 대화 상자에서 솔루션 노드를 열고 프로젝트를 선택하십시오.
  • 코드 프로젝트 이름을 확인하고 대화 상자를 닫습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top