Visual Studioでは、自動生成されたアクセサークラスを介してプライベートメソッドの単体テストを実行できます。正常にコンパイルされるプライベートメソッドのテストを作成しましたが、実行時に失敗します。コードとテストのかなり最小限のバージョンは次のとおりです。
//in project MyProj
class TypeA
{
private List<TypeB> myList = new List<TypeB>();
private class TypeB
{
public TypeB()
{
}
}
public TypeA()
{
}
private void MyFunc()
{
//processing of myList that changes state of instance
}
}
//in project TestMyProj
public void MyFuncTest()
{
TypeA_Accessor target = new TypeA_Accessor();
//following line is the one that throws exception
target.myList.Add(new TypeA_Accessor.TypeB());
target.MyFunc();
//check changed state of target
}
実行時エラーは次のとおりです。
Object of type System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' cannot be converted to type 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]'.
intellisenseによると-そして私はコンパイラーだと-ターゲットはTypeA_Accessor型です。ただし、実行時にはタイプAであるため、リストの追加は失敗します。
このエラーを停止する方法はありますか?または、おそらくより可能性が高い、他の人々が他のアドバイスを持っている(おそらく「プライベートメソッドをテストしない」および「ユニットテストでオブジェクトの状態を操作しない」と予測しています)。