vs 2012:Shims编译

时间:2012-12-28 09:28:33

标签: visual-studio-2012 shim microsoft-fakes

我正试图在VS 2012终极中制作一个垫片,如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元素的Diagnostic属性设置为“true”并重建项目。

如何解决此警告?

3 个答案:

答案 0 :(得分:39)

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

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

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

<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>

答案 1 :(得分:2)

我已经单独解决了这个问题。

属性中的.Net Framework 4.0。

更改4.5解决问题。

答案 2 :(得分:0)

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