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/遵循方向

http://msdn.microsoft.com/en-us/library/d00bd51t(v=vs.100).aspx显示 Thread.Sleep 在 mscorlib 中,所以我添加了它的假但 System.Threading.Fakes 命名空间不包含 ShimThread也不是 StubThread。Thread 是一个密封类,但 VS fake 框架应该能够在密封类中伪造静态方法。

4

2 回答 2

8

这是很有可能的。默认情况下,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 文件的更多信息

于 2013-12-09T20:17:04.663 回答
3

这是因为 Shim 框架无法伪造 mscrolib 和 System 中的所有 .Net BCL 类,请参阅:MSDN

不幸的是,我找不到不受支持的类型列表。但似乎目前不支持主要不是纯 CLR 类或需要操作系统功能的类型(线程、FileSystemWatcher 等)。

于 2013-05-06T07:15:00.090 回答