2014-09-22 9 views
0

我創建了一個通用類之後,如下所示,其完美地工作時,我編碼它和在Visual Studio中測試的程序。然而,在自動構建,一個單元測試跑不能與組件處理,雖然沒有編譯或運行時錯誤是可見先前:怪異「的通用參數的數目不等於元數」錯誤在單元測試程序編譯和工作

錯誤組件的「.... DLL」處理過程中發生18錯誤:提供的通用參數數量不等於泛型類型定義的參數。 參數名:實例...測試

單元測試沒有泛型類的用法。

我註釋掉了所有的代碼,構造函數,字段從類,然後自動實現與Visual Studio的界面,產生存根與「拋出新NotImplementedException()」。

public class RequiredPropertiesProfile<TPropertyGroup, TProperty> 
    : IDictionary<bool, IDictionary<TPropertyGroup, ICollection<TProperty>>> 
{ 
    // auto implementations of IDictionary, with throw new NotImplementedException(); 
} 

它再次編譯,但是編譯單元測試再次失敗,沒有明顯的原因。該測試具有「Microsoft.VisualStudio.QualityTools.UnitTestFramework」引用。

類是主要定義屬性結構,需要設置或不設置(布爾)。它應該是通用的,可以是字符串(用戶友好的,包括助手類),數據對象或數據庫標識符(int類型),以及用於將一個轉換爲另一個的附加方法。

我發現這個錯誤的幾篇文章,但沒有適合我的情況 - 尤其是編譯和第一無差錯運行,然後在一個愚蠢的單元測試,這是不是即使使用泛型類絆腳石。

+0

您是否嘗試過清潔您的解決方案? – 2014-09-22 20:16:17

+0

試過了,沒有幫助。順便說一下,它是VS 2010.另一件事是:當我用一個通用的TBool替換了bool時,它似乎工作,但這使得使用某些功能是不可能的。 – 2014-09-22 20:51:51

+0

您可以添加實例化泛型類的測試代碼嗎? – 2014-09-22 21:21:27

回答

0

雖然這不是一個答案的問題的原因可能是什麼,它有助於創建一個基類具有完全通用的接口,然後把我的實現與1級型布爾之上:

public class RequiredPropertiesGenericBase<TState, TPropertyGroup, TProperty> 
    : IDictionary<TState, IDictionary<TPropertyGroup, ICollection<TProperty>>> 
{ 
    private _innerDict = new Dictionary<TState, IDictionary<TPropertyGroup, ICollection<TProperty>>>(); 

    // _innerDict wrapping methods; 
} 


public class RequiredPropertiesProfile<TPropertyGroup, TProperty> 
    : RequiredPropertiesGenericBase<bool, TPropertyGroup, TProperty> 
{ 
    public RequiredPropertiesProfile(IEnumerable<PropSetting> settings) 
    { 
     foreach (var set in settings) 
     { 
      this.AddPropertySetting(set.MustBeSet, set.PropertyGroup, set.Property); 
     } 
     // ... 
    } 

    // implementation 
} 

我仍然不知道是什麼原因造成這一點,它仍然很奇怪,最初的代碼將編譯和運行,但跨單元測試甚至沒有創建類的實例(但使用它的組件)絆倒。會發生

問題在多臺計算機中,首先,生成計算機用自動單元測試(通常做構建/測試前的總清理)上。然後在工作站上運行單元測試。

問題仍然發生在最初的版本中,刪除構造(只留下汽車構造函數)和所有的代碼之後,除了假的接口實現,與正在使用無處類。