2016-09-25 14 views
2

私はこの問題に関して多くを検索しましたが、私が探しているのと同じ問題は出ませんでした。内部静的クラスには、プライベートクラスが含まれています。マイクロソフトの偽物を使って単体テスト用のプライベートクラスのオブジェクトを作成する方法

私は、以下のC#コードをテストするためにmicrosoft fakeを使用しています。

私は今、私はメソッドを作成テストしたい私は

internal static class IntStaticClass 
{ 

    //some code 

    private class PvtClass 
    { 
     public string Create(Obj1 o1, Obj2 o2) 
     { 

     //some code 

     } 
    } 
} 

をテストするには、以下のクラスを持っている状況でこだわっています。

しかしPrivateObjectまたはPrivateTypeはtypeofを見つけることができない(MyPrivateClass)

どのように私はテストするために作成PvtClassのオブジェクトを作成し、メソッドを呼び出すことができ、私を助けてください。

ありがとうございます。

答えて

3

あなたはAssembly.GetType()方法を介して外側のクラスへの参照を取得することができ、そこから内部クラスは、アセンブリへの参照を取得するために、Type.GetNestedTypes(BindingFlags.NonPublic)

少なくとも痛みを伴う方法によってアクセスすることができるという点で、いくつかの公共のクラスtypeof(ありますアセンブリ).Assembly

+0

ジョシュアさんに感謝します。今これを試してみましょう。 –

1

ジョシュアに感謝します。最後に問題を解決しました。乾杯。

私は内部プライベートクラス&のインスタンスを作成するためのコードを以下に書いてそのメソッドを実行します。

  var type = typeof(IntStaticClass); 
      var types = type.GetNestedTypes(BindingFlags.NonPublic); 
      MethodInfo methodInfo = types[0].GetMethod("Create"); 
      object classInstance = System.Activator.CreateInstance(types[0], null); 
      object[] parametersArray = new object[2] { new Obj1(), new Obj2() }; 
      var result = methodInfo.Invoke(classInstance, parametersArray); 

これでメソッドをテストできました。乾杯。

関連する問題