1

以下是测试代码。

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

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

然后使用 Visual Studio 为方法创建一个联合测试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 Test 构建的包装器Program_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 回答