2013-06-18 63 views
1

我有大約300個單元測試的組件,這是我最初在VS2010下開始的解決方案的一部分。許多測試使用了Micrsoft提供的Moles框架,但升級到VS2012(更新2)後,我想更改測試以使用官方提供的Fakes框架。任何單元測試失敗後VS2012從摩爾轉換爲虛假

我相應的測試相應的更新,它通常只參與創建的代碼ShimsContext和一些細微的變化:

以前

[TestMethod] 
[HostType("Moles")] 
public void MyUnitTest_CalledWithXyz_ThrowsException() 
{ 
    // Arrange 
    ... 
    MGroupPrincipal.FindByIdentityPrincipalContextIdentityTypeString = 
     (t1, t2, t3) => null; 
    ... 

    try 
    { 
     // Act 
     ... 
    } 
    catch(Exception ex) 
    { 
     // Assert 
     ... 
    }  
} 

[TestMethod] 
public void MyUnitTest_CalledWithXyz_ThrowsException() 
{ 
    using(ShimsContext.Create()) 
    { 
     // Arrange 
     ... 
     ShimGroupPrincipal.FindByIdentityPrincipalContextIdentityTypeString = 
      (t1, t2, t3) => null; 

     try 
     { 
      // Act 
      ... 
     } 
     catch(Exception ex) 
     { 
      // Assert 
      ... 
     }  
    } 
} 

我有不同的測試課程EST項目,當我運行測試,我得到任意誤差修改,我無法解釋,例如:=> 21次測試失敗/ 15通

  • 運行測試爲同一類在Release模式一類

    • 運行測試在調試模式下=> 2次測試失敗/ 34次通過
    • 在發佈模式下再次運行相同類的測試=> 2次測試失敗/ 34次通過
    • 在項目中運行所有測試=> 21次測試失敗/ 15次上面提到的類)

    same對他的系統上的同事的行爲。錯誤消息總是TypeLoadException S,從而爲

    試驗方法...拋出異常:System.TypeLoadException:無法加載程序集「類型「System.DirectoryServices.Fakes.ShimDirectorySearcher」 System.DirectoryServices.4.0.0.0 .Fakes,版本= 4.0.0.0,文化=中性公鑰= ...」

    在VS2012本身的源代碼編輯器不會顯示任何錯誤,按預期工作智能感知,在如ShimDirectorySearcher節目,其中鼠標提示它位於等等。此外,當我打開使用.NET Reflector生成的Fakes程序集(例如System.DirectoryServices.4.0.0.0.Fakes.dll)時,錯誤消息中顯示的類型存在。

    在我們從VS2010切換到VS2012之前,所有測試都正常工作(在調試和發佈模式下),但現在我們沒有線索有什麼問題。爲什麼結果以上述方式改變?爲什麼即使類型確實存在,我們也會得到TypeLoadExceptions?

    不幸的是,Micrsoft或互聯網上幾乎沒有任何幫助。

  • +0

    你完全擺脫了痣集會/ artefact?還要確保你清理了所有具有現有程序集的目錄,並以一個乾淨的狀態開始。這很有趣。 – Spock

    +0

    請在這裏或http://connect.microsoft.com/visualstudio –

    +0

    @Raj發佈一個小的repro。是的,這樣做,因爲我以前曾經與摩爾偶爾有過問題。我想我可能通過刪除'.testsettings'文件並使用'.runsettings'文件來找到解決方案。現在不在工作,但我會進一步調查並保持更新。 @Oleg Sych - 當我可以用一個小的新解決方案再現它來證明問題時,我會這樣做。 – Gorgsenegger

    回答

    0

    我不明白爲什麼從VS2010中得到舊的.testsettings文件是這樣的問題,但刪除它並添加MSDN建議的.runsettings文件爲我做了這項工作。

    所有的問題都解決了:

    • 所有單元測試運行(再次)運行沒有問題(再次)的測試
    • 任意組合,沒有問題
    • 我可以調試使用正版正貨測試(我使用之前以獲得測試工具化錯誤)

    希望這有助於其他遇到問題的人,似乎沒有太多有關假貨的信息。

    關於Code Coverage還有一件事:通過Test => Analyze Code Coverage菜單可以工作(無需配置任何測試設置)。對於TFS構建定義,您可以通過選擇Process => Basic => Automated Tests => 1. Test Source來啓用構建的代碼覆蓋。現在點擊相應的文本字段,然後在點擊文本字段時(僅)顯示的...按鈕。現在在Test runner組合框中選擇Visual Studio Test Runner。現在您也可以從選項中選擇Enable Code Coverage