2

テストコードを実行すると、次のエラーが発生しました。問題を回避する方法は?Visual Studio2010Premiumの組み込みMStestを使用しています。

テストメソッドTestProgram.myProgramTest.GetTypeListTestが例外をスローしました:
System.InvalidCastException:タイプ'System.Collections.Generic.List`1[MyProgram.MyClass]'のオブジェクトをタイプ'System.Collections.Generic.List`1[MyProgram.MyClass_Accessor]'にキャストできません。

テストする方法:

public class MyProjectClass {
    private List<MyClass> GetTypeList()
    { .... 
    }
}

class MyClass {....} // A POCO class

テストコード(ほとんどのコードはVisual Studioによって自動的に生成されます):

[TestMethod()]
[DeploymentItem("myProgram.exe")]
public void GetTypeListTest()
{
    MyProjFile_Accessor target = new MyProjFile_Accessor ();
    var actual = target.GetTypeList();
    Assert.IsTrue(actual.Count > 2);
}

この質問が2回反対票を投じられた理由は本当にわかりません。他のすべてのコードは、問題とは無関係であるか、VisualStudioによって自動的に生成され
ます。これは非常に単純なクラス定義です。また、テストフィクスチャはVS2010ウィザードを使用して作成されました。戻るだけのメソッドMyClassはテストに合格できます。問題は、戻り型が。のメソッドですList<MyClass>

4

1 に答える 1

4

クラスMyClassにはアクセス修飾子がなく、C# はinternal既定でアクセス修飾子を使用します。

内部とは、クラスがそのアセンブリ内でのみアクセスできることを意味します。

通常、単体テストは別のアセンブリで実装され、使用できませんMyClass

MS Tests が生成しMyClass_Accessorたクラスは、基本的にリフレクションを使用してクラス自体とそのメソッドへのアクセスを提供するラッパーです。

宣言を変更しpublic class MyClass {....}、単体テストを再生成します (これは、_Accessorクラスが不要であることを MS Test に伝えるために必要です)。

于 2012-07-15T01:41:08.660 に答える