`MS Fakes` 中使用的 `AllInstances`

The `AllInstances` using in the `MS Fakes`

MS Visual Studio 2015 企业。
.Net Framework 4.6

来自MSDN

To use a shim for an instance method, write AllInstances between the type name and the method name:

System.IO.Fakes.ShimFile.AllInstances.ReadToEnd = ...

但是当我在 ShimFile 之后写 .IntelliSense 在 ComboBox 中没有 AllInstances 项目:

我也尝试对 DateTime 做同样的事情,我看到另一个问题:AllInstances 存在,但是 IntelliSense 没有项目它:

为什么会出现这些错误?

对于问题 1,我认为您尝试使用错误的 Shim class。您需要 StreamReader(其中包含 ReadToEnd 方法)。这对我有用:

string testString = "Hello World!";
System.IO.Fakes.ShimStreamReader.AllInstances.ReadToEnd = reader => testString;

对于第 2 期,我认为您无法对结构进行 Shim。 DateTime 实际上是一个结构而不是 class。这是我试过的一些示例代码:

public struct TestShimOfStruct
{
    public int Year { get; set; }
}

public class TestShimOfClass
{
    public int Year { get; set; }
}

...

[TestMethod]
public void TestStructAndClass()
{
    using (ShimsContext.Create())
    {
        PartialTest.Fakes.ShimTestShimOfClass.AllInstances.YearGet = shimClass => 2015;
        PartialTest.Fakes.ShimTestShimOfStruct.AllInstances.YearGet = shimClass => 2015;
    }
}

TestMethod 在 VisualStudio 中显示此错误。

如您所见,结构失败,而 class 成功,即使在逻辑上是等价的。