2012-07-12 31 views
2

運行測試代碼時出現以下錯誤。如何解決該問題?我正在使用Visual Studio 2010 Premium的內置MStest。被測試無法強制List`1 [MyClass]'鍵入List`1 [MyClass_Accessor]'?

 
Test method TestProgram.myProgramTest.GetTypeListTest threw exception: 
System.InvalidCastException: Unable to cast object of type 'System.Collections.Generic.List`1[MyProgram.MyClass]' to type '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>的方法。

+0

MyClass_Accessor是否繼承自MyClass?目前,您正在嘗試將蘋果列表作爲橙子列表進行投放。即使MyClass_Accessor:MyClass,也不能轉換爲列表(因爲它具有讀/寫屬性)請查看C#4的「in」和「out」關鍵字以獲取更多關於鑄造,同向和反向變化的信息。 – James 2012-07-12 17:36:33

+0

代碼投到'List '?該演員陣容是不可能的,不支持一般差異。 – CodesInChaos 2012-07-12 17:46:23

+0

看起來你需要審查,也許修復(生成?)訪問器。您是否在生成第一個測試用例之後更改了接口? – 2012-07-12 18:58:17

回答

4

MyClass沒有訪問修飾符,C#默認使用internal訪問修飾符。

內部意味着該類只能在其組件中訪問。

單元測試通常在單獨的程序集中實現,並且不能使用MyClass

生成的MS測試MyClass_Accessor類本質上是一個使用反射來提供對類本身及其方法的訪問的包裝。

將聲明更改爲public class MyClass {....}並重新生成單元測試(這對於告訴MS測試_Accessor類是不必要的)是必需的。

相關問題