1

私は次の設定をしています。3 つのプロジェクトによるソリューション。

プロジェクト A、名前空間 A、クラス A

プロジェクト B、名前空間 B、クラス B : A

B の単体テスト用の Test プロジェクト。 B のプライベート関数にアクセスするには、Create Private Accessor -> Testを使用して Test プロジェクトにアクセサーを作成します。

A は別のアセンブリにあるようです VS は A のアクセサ関数を作成しません。

4

1 に答える 1

1

複数のアクセサーを使用する必要があります。このことを考慮:

// Assembly A
public class ClassA
{
    protected int someInt = 1;
    private void DoSthmWithA()
    {
        someInt = 10;
    }
}

// Assembly B
public class ClassB : ClassA
{
    private void DoSthmWithB()
    {
        someInt = 11;
    }
}

[TestMethod()]
public void Testing
{
    var target = new ClassB();

    var poA = new PrivateObject(target, new PrivateType(typeof (ClassA)));
    var poB = new PrivateObject(target);

    var accA = new ClassA_Accessor(poA);
    var accB = new ClassB_Accessor(poB);
    accA.DoSthmWithA();
    Assert.AreEqual(accA.someInt, 10);
    accB.DoSthmWithB();
    Assert.AreEqual(accA.someInt, 11);
}

また

[TestMethod()]
public void Testing
{
   var target = new ClassB();

   var poA = new PrivateObject(target, new PrivateType(typeof(ClassA)));
   var poB = new PrivateObject(target);

   poA.Invoke("DoSthmWithA");

   var accA = new ClassA_Accessor(poA);
   Assert.AreEqual(accA.someInt, 10);

   poB.Invoke("DoSthmWithB");

   Assert.AreEqual(accA.someInt, 11);
}
于 2013-01-24T05:41:04.073 に答える