2013-04-22 61 views
0

我在mscorlib.fakes庫中找到僞造的Thread.Sleep時遇到問題。 我在http://www.codewrecks.com/blog/index.php/2012/04/27/using-shims-in-visual-studio-11-to-test-untestable-code/爲什麼我不能僞造Thread.Sleep使用VS假框架

http://msdn.microsoft.com/en-us/library/d00bd51t(v=vs.100).aspx以下方向顯示了Thread.Sleep在mscorlib程序,所以我加了假,但System.Threading.Fakes命名空間不包含ShimThread也不StubThread。 線程是密封類,但VS假框架應該能夠在密封類中僞造靜態方法。

+0

你試圖僞裝Thread類或Thread.sleep代碼的方法?你爲什麼想要? – 2013-04-22 23:01:21

+0

在我的測試中,我檢查Thread.Sleep是否被調用,當它不應該。我正在計劃添加Assert.Fail()裏面的假Thread.Sleep – user156144 2013-04-22 23:33:28

回答

3

這是因爲Shim框架不能僞造mscrolib和System中的所有.Net BCL類,請參閱:MSDN

不幸的是我找不到不支持的類型列表。但是,目前看來,主要不是純CLR類或需要OS功能的類型(Thread,FileSystemWatcher,...)不受支持。

8

這是very much possible。默認情況下,Fakes框架不會爲mscorlib的大多數類型(包括System.Threading命名空間中的類型)生成墊片,因爲Fakes框架本身使用了mscorlib。因此,只有少數類型被填充, 但是,您可以通過更改項目中添加的mscorlib.fakes文件來配置此行爲。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/"> 
    <Assembly Name="mscorlib" Version="4.0.0.0"/> 
    <ShimGeneration> 
     <Add Namespace="System.Threading!"/> 
    </ShimGeneration> 
</Fakes> 

現在建立測試項目,你可以看到在System.Threading命名空間類型的墊片,包括ShimThread.SleepInt32

瞭解更多關於.fakes xml文件on this page

+0

謝謝!不幸的是,這隻能讓我走到一半。我這樣做了,它產生了存根,但不是墊片。任何想法可能會出錯? – 2013-12-12 21:45:38

+0

@Dustin你確定你在.fakes文件中使用了嗎?因爲那應該只產生墊片而不是存根。我驗證它對我有用,而且我最近實際上已經用它來攔截多個測試用例中的Thread.Sleep。 – 2013-12-14 08:50:12

+0

更具體地說,我試圖填充System.ServiceModel.Channels。我在配置文件中肯定有。我也試過。儘管我最終解決了這個問題,所以這個問題仍然沒有解決。 – 2013-12-14 14:45:46

相關問題