我有大約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通
- 運行測試在調試模式下=> 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或互聯網上幾乎沒有任何幫助。
你完全擺脫了痣集會/ artefact?還要確保你清理了所有具有現有程序集的目錄,並以一個乾淨的狀態開始。這很有趣。 – Spock
請在這裏或http://connect.microsoft.com/visualstudio –
@Raj發佈一個小的repro。是的,這樣做,因爲我以前曾經與摩爾偶爾有過問題。我想我可能通過刪除'.testsettings'文件並使用'.runsettings'文件來找到解決方案。現在不在工作,但我會進一步調查並保持更新。 @Oleg Sych - 當我可以用一個小的新解決方案再現它來證明問題時,我會這樣做。 – Gorgsenegger