2

运行测试代码时出现以下错误。如何解决该问题?我正在使用 Visual Studio 2010 Premium 的内置 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);
}

我真的不知道为什么这个问题两次被否决,所有其他代码要么与问题无关,要么由 Visual Studio 自动生成。
这是非常直接的类定义。并且测试夹具是使用 VS 2010 向导创建的。刚刚返回的方法MyClass可以通过测试。问题是返回类型为List<MyClass>.

4

1 回答 1

4

MyClass没有访问修饰符,C#internal默认使用访问修饰符。

内部意味着该类只能在其程序集中访问。

单元测试通常在单独的程序集中实现,不能使用MyClass.

MS 测试生成MyClass_Accessor的类本质上是一个包装器,它使用反射来提供对类本身及其方法的访问。

将声明更改为public class MyClass {....}并重新生成单元测试(这是告诉 MS Test_Accessor不需要该类的必要条件)。

于 2012-07-15T01:41:08.660 回答