3

さらに多くの派生ページのベースである 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);
}

このコードには多くの問題があると思います (修正を提案してください) が、私の主な目標は、このプロジェクト全体に対していくつかのテストの実装を開始することです。私は小さく始めることにしました - 一度に 1 つの方法です。最初に新しいテスト プロジェクトを作成しようとしましたが、保護されているため SetupApproval メソッドにアクセスできません。私の次の試みは、ベース ページ内に TestMethod を配置することでしたが、テストを実行する方法がありません。

最後に、Visual Studio 2008 の既定のテスト フレームワークを使用しています。

4

1 に答える 1

15

2 つのオプション:

  • DerivedFromBaseClassがテスト用にのみ存在するクラスであると仮定すると、単に呼び出して戻り値を返す新しいパブリック(または内部) メソッドを与えるだけです。SetupApproval
  • protected internal代わりにメソッドを作成しInternalsVisibleTo、内部メソッドにアクセスできるようにテスト アセンブリを設定していることを確認してください。これはテスト用であることを文書化します。

特に保護されたメソッドが多数あり、基本クラスが非抽象である場合、最初のオプションはよりクリーンで、2 番目のオプションはよりシンプルです。

于 2012-05-14T15:32:36.897 に答える