2012-05-14 2 views
2

나는 더 많은 파생 된 페이지에 기지 ASP.NET 페이지를 가지고 있으며보호 된 방법을 테스트하는 방법은 무엇입니까?

protected Change SetupApproval(string changeDescription) 
{ 
    Change change = Change.GetInstance(); 
    change.Description = changeDescription; 
    change.DateOfChange = DateTime.Now; 
    change.MadeBy = Common.ActiveDirectory.GetUsersFullName(AccessCheck.CurrentUser()); 
    change.Page = PageName; 
    return change; 
} 

나는 다음과 같은 단위 테스트를

[TestMethod] 
public void SetupApproval_SubmitChange_ValidateDescription() 
{ 
    var page = new DerivedFromBaseClass(); 
    var messageToTest = "This is a test description"; 

    var change = (page as InternalAppsPage).SetupApproval(messageToTest); 

    Assert.IsTrue(messageToTest == change.Description); 
} 

난을 작성하려면 다음과 같은 보호 방법을 포함 이 코드에는 많은 문제가 있으므로 (수정 제안은 자유롭게하십시오), 내 목표는이 전체 프로젝트에 대한 몇 가지 테스트를 시작하는 것입니다. 나는 한 번에 작은 하나의 방법을 시작하기로 결정했습니다. 먼저 새 테스트 프로젝트를 만들려고했으나 보호되어 있기 때문에 SetupApproval 메서드에 액세스 할 수 없습니다. 내 다음 시도는 TestMethod를 기본 페이지 안에 넣는 것이었지만 테스트를 실행할 방법은 없었습니다.

마지막으로 Visual Studio 2008의 기본 테스트 프레임 워크를 사용하고 있습니다.

답변

13

두 가지 옵션 :

  • DerivedFromBaseClass 전적으로 테스트를 위해 존재하는 클래스입니다 가정하면, 그냥 그것을 단지 SetupApproval를 호출하고 반환 값을 반환하는 새로운 공공 (또는 내부) 방법을 제공합니다.
  • 대신 protected internal 메서드를 만들고 테스트 메서드에 InternalsVisibleTo을 설정하여 내부 메서드에 액세스 할 수 있는지 확인하십시오. 이것이 시험용임을 문서화하십시오.

첫 번째 옵션은 청소기, 두 번째는 당신이 보호 방법 기본 클래스가 아닌 추상적 인이 많은 경우 특히 간단하다.

+0

"DerivedFromBasClass"는 테스트 용으로 만 사용하지는 않겠지 만 많은 의미가 있으므로 테스트 용으로 만듭니다. 고맙습니다! – Mark