2013-10-29 48 views
1

我有一個測試線程代碼的單元測試。 我正在調用一個在不同線程中調用的方法,但是當執行測試時,將執行生產代碼而不是我的假方法。 我測試過,如果我在單元測試的同一個線程中運行代碼,我的假方法被調用。 這是已知的限制嗎? 謝謝VisualStudio Shim不適用於不同的線程

+0

我記錄了這個錯誤今天在微軟連接。我無法在互聯網上找到任何有關在多線程環境下工作的墊片。 – Peter

+0

我可以得到網址嗎?我相信有一種方法來投票連接的錯誤 – user156144

+0

http://connect.microsoft.com/VisualStudio/feedback/details/806872/shims-does-not-working-with-a-threadpool-queueuserworkitem – Peter

回答

2

好吧,事實證明ShimsContext在我的線程方法被調用之前被處置。 VS僞造是全球意義它適用於所有線程。

0

我發現,添加一個較長的睡眠解決問題,就像你說的,當墊片它自身已經對子級被稱爲ShimsContext被佈置:

 using (ShimsContext.Create()) 
     { 
      bool shimcalled = false; 
      ShimClass1 h = new ShimClass1(); 
      ShimClass1.MyStaticMethodToBeShimed =() => 
      { 
       shimcalled = true; 
      }; 


      new Class1().MyMethodUnderTest(); 

      Thread.Sleep(1000); //or wait with a while loop till shimcalled = true: 
      //int couter = 0; while (counter < 100 && shimcalled == false) { counter++; Thread.Sleep(10);} 

      Assert.IsTrue(shimcalled); 
     } 
相關問題