【问题标题】:How to test a protected method?如何测试受保护的方法?
【发布时间】:2012-05-22 02:49:36
【问题描述】:

我有一个 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 的默认测试框架。

【问题讨论】:

    标签: unit-testing visual-studio-2008 protected


    【解决方案1】:

    两种选择:

    • 假设DerivedFromBaseClass 是一个仅用于测试的类,只需给它一个新的public(或内部)方法,它只调用SetupApproval 并返回返回值。
    • 改为使用protected internal 方法,并确保为测试程序集设置InternalsVisibleTo,以便它可以访问内部方法。证明这是为了测试。

    第一个选项更简洁,第二个更简单,特别是如果您有很多受保护的方法并且基类是非抽象的。

    【讨论】:

    • 我不打算将DerivedFromBasClass 仅用于测试,但这很有意义,因此我将创建一个专门用于测试。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多