我无法在mscorlib.fakes库中找到伪造的Thread.Sleep。 我正在http://www.codewrecks.com/blog/index.php/2012/04/27/using-shims-in-visual-studio-11-to-test-untestable-code/
跟进方向http://msdn.microsoft.com/en-us/library/d00bd51t(v=vs.100).aspx显示Thread.Sleep在mscorlib中,所以我添加了它的假,但System.Threading.Fakes命名空间不包含ShimThread和StubThread。 线程是一个密封类,但VS假框架应该能够在密封类中伪造静态方法。
答案 0 :(得分:8)
这是very much possible。默认情况下,Fakes框架不会为mscorlib的大多数类型(包括System.Threading命名空间中的类型)生成填充程序,因为Fakes框架本身使用了mscorlib。所以只有少数类型是shimmed, 但是,您可以通过更改项目中添加的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
答案 1 :(得分:3)
这是因为Shim框架无法伪造mscrolib和System中的所有.Net BCL类,请参阅:MSDN。
不幸的是,我找不到不受支持的类型列表。但看起来,目前主要不支持纯CLR类或需要OS功能的类型(Thread,FileSystemWatcher,...)。