2012-05-14 161 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