11

我正在尝试在 VS 2012 Ultimate 中制作一个 shim,如 MSDN 站点中所述:

[TestClass]
public class TestClass1
{ 
    [TestMethod]
    public void TestCurrentYear()
    {
        int fixedYear = 2000;

        using (ShimsContext.Create())
        {
          // Arrange:
          // Detour DateTime.Now to return a fixed date:
          System.Fakes.ShimDateTime.NowGet = 
              () =>
              { return new DateTime(fixedYear, 1, 1); };

          // Instantiate the component under test:
          var componentUnderTest = new MyComponent();

          // Act:
          int year = componentUnderTest.GetTheCurrentYear();

          // Assert: 
          // This will always be true if the component is working:
          Assert.AreEqual(fixedYear, year);
        }
    }
}

请参阅http://msdn.microsoft.com/en-us/library/hh549176.aspx

但是当我编译我的测试项目时,我在输出中得到了一个概念:

警告:无法生成某些假货。有关完整的详细信息,请将此文件中的 Fakes 元素的诊断属性设置为“true”并重新构建项目。

如何解决此警告?

4

3 回答 3

40

Visual Studio 2012 Update 1 改进了 Fakes 中的代码生成,以简化代码生成问题的故障排除。每当无法为特定类型生成 Stub 或 Shim 时,Fakes 现在可以生成警告消息 - 您可以在 Visual Studio 的错误列表窗口中看到这一点。

但是,为了防止警告数量对于大型程序集(例如 System)变得不堪重负,Fakes 默认会生成一个警告。您可以通过将.Fakes 文件中Diagnostic的 XML 元素的属性设置为“true”或“1”并重新构建项目来查看完整的警告消息列表。(有关示例,请参见下面的第一行代码。)Fakes

要解决警告,请更改 .Fakes 文件以仅生成测试中需要的存根和垫片。此处 的详细信息可用选项的完整列表

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
  <Assembly Name="System" Version="4.0.0.0"/>
  <StubGeneration Disable="true" />
  <ShimGeneration>
    <Clear/>
    <Add FullName="System.DateTime!"/>
  </ShimGeneration>
</Fakes>
于 2012-12-28T18:16:41.380 回答
2

我已经一个人解决了。

它是属性中的 .Net Framework 4.0。

更改 4.5 解决问题。

于 2012-12-28T10:01:06.873 回答
0

尝试删除那些 .Fakes 文件。我不小心将它们删除并编译,警告消失了。我不确定影响是什么,但一切似乎都运行良好。我认为它会导致编译重新编译伪造文件的所有内容。

于 2013-09-18T20:09:43.923 回答