2

當我試圖調試一個單元測試,我收到下面的異常消息:UnitTestIsolationException:調試單元測試在ShimsContext.Create

UnitTestIsolation儀器初始化失敗。請重新啓動 Visual Studio和重新運行該測試

有了這個堆棧跟蹤:

在 Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InitializeUnitTestIsolationInstrumentationProvider() 在 Microsoft.QualityTools。 Testing.Fakes.Shims.ShimRuntime.CreateContext() at Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create()at Sample.Business.Tester.ProcessorManagerTest.Test_first_run_ever()in d:\ Folder1中\ Sample.Business.Tester \ ProcessorManagerTest.cs:線62

的代碼是:

var prc = new ProcessorManager(ProcessRepository,ProcessStatusRepository); 
using (ShimsContext.Create()) 
{ 
    ShimDateTime.NowGet =() => new DateTime(2015, 10, 1); 
    prc.Run(); 
} 

該異常是在ShimsContext.Create()拋出。

我已閱讀Visual Studio 2012 fakes UnitTestIsolation instrumentation failed to initialize,並嘗試了所有步驟,但對我無效。我沒有使用Nunit。

+0

什麼是「ProcessorManager」? – doobop

+0

@doobop嗨,這是由我創建的自定義類,之後出現錯誤 – DanielV

+0

當我嘗試重現此操作時,它按預期工作(我正在使用VS 2013和.NET 4.6)。我無法輕鬆回到2012和.NET 4.0,所以我沒有明確地嘗試過。如果您註銷ProcessorManager,它仍會失敗嗎?如果你將構造函數和/或Run分出來,那麼怎麼辦?你可以包含構造函數嗎?有時它是自定義類中的某些內容導致以後的調用失敗。 – doobop

回答

3

如果您的單元測試的項目,涉及到假貨或墊片問題,請執行以下操作:

  1. 在引用,刪除這些DLL:
    • Microsoft.QualityTools.Testing.Fakes
    • Microsoft.VisualStudio.QualityTools.UnitTestFramework
    • System.4.0.0.0.Fakes
    • mscorlib.4.0.0.0.Fakes
  2. 此外,在 「正版正貨」 的文件夾,刪除這些文件:
    • mscorlib.fakes
    • System.fakes
  3. 添加DLL文件:
    • Microsoft.QualityTools。 Testing.Fakes
    • Microsoft.VisualStudio.QualityTools.UnitTestFramework

從以下源路徑:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies

  • 右擊 「System.dll中」,並在上下文菜單中的 「添加假組件」 選擇。
  • 清潔工程。
  • 構建項目。
  • +1

    不可思議的是,我之前也採取過相同的步驟,並沒有記住,但是這確實解決了這個問題。 – DanielV