2012-04-03 131 views
1
私有成員

我目前工作的一個C#解決方案在VS 2010單元測試使用* _Accessor

爲了寫出足夠的單元測試我的業務流程,我使用訪問的方式訪問和更改的內部我的業務對象。

現在我的TFS構建服務器上出現了一些問題,我在其他測試程序集中添加了Accessors到我的objet程序集,當我的測試運行不是所有的測試程序時,有些程序失敗時出現警告作者:

 
... <Test failed message> .... 
... Could not load file 'ObjectLibrary_Accessor, Version=0.0.0.0, 
     Culture=neutralm PublicKeyToken=ab391acd9394' or one of its dependencies. 
... 
... 

我相信問題是,因爲每個測試程序集編譯一個ObjectLibrary_Accessor.dll被創建一個不同的強名稱。因此,當編譯一些測試時,強名稱檢查將失敗並出現上述錯誤 - 儘管dll處於預期位置。

我看到許多選項,其中沒有一個是特別有吸引力的,這些包括:

  1. 不使用_Accessor方法。
  2. 爲每個測試程序集設置不同的XX_Accessor.dll - 是否可以更改生成的程序集的名稱以避免衝突?
  3. 將我的集成版本更改爲對每個測試項目使用不同的二進制文件夾(如何?)
  4. 其他選項我不知道?

我會對任何有關此問題,解決方案和解決方法的建議或經驗感興趣(儘管我沒有時間更改我的代碼,因此選項1並不具有代表性)。

回答

3

如您所見,Accessor方法有點脆弱。

通過使用InternalsVisibleTo程序集屬性,可以使內部項對您的測試代碼可見。

如果你想獲得私有方法並且你正在使用.NET 4.0,那麼考慮使用類似Trespasser的東西來簡化它。

如需更多選項,請參閱此問題的回答:How do you unit test private methods?