为什么我不能伪造Thread.Sleep使用VS假框架

时间:2013-04-22 22:58:31

标签: shim

我无法在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假框架应该能够在密封类中伪造静态方法。

2 个答案:

答案 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,...)。