1

以下はテストコードです。

namespace ConsoleApplication2
{
    class MyClass {}
    class Program
    {
        static void Main(string[] args) { }

        List<MyClass> Test() { return new List<MyClass>(); }
    }
}

次に、Visual Studio を使用して、 method のユニオン テストを作成しますTest()

    [TestMethod()]
    [DeploymentItem("ConsoleApplication2.exe")]
    public void TestTest()
    {
        Program_Accessor target = new Program_Accessor(); // TODO: Initialize to an appropriate value
        List<MyClass_Accessor> actual;
        actual = target.Test();
        Assert.IsTrue(actual != null);
    }

テストを実行すると、次の例外が発生します。問題を回避するにはどうすればよいですか?

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

次の方法を試しましたが、うまくいきません。

IEnumerable<MyClass> Test1() { return new List<MyClass>(); }
4

1 に答える 1

2

プログラムとメソッドは公開されていないため、MSTest と他のコードはそれを呼び出すことができません。MS TestProgram_Accessorは、リフレクションを通じてコードを使用するラッパーをビルドしました。

コードを変更してpublicアクセス修飾子を使用し、テストを再生成します。単体テストを学ぶ最も簡単な方法です。

public class Program
{
   public class MyClass{}

   static void Main(string[] args) { }

   public List<MyClass> Test() { return new List<MyClass>(); }
}

InternalsVisibleToAttribute公開したくない場合に使用できますMyClass

MSDN のフレンド アセンブリ

于 2012-07-15T01:24:03.383 に答える