我正试图在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”并重建项目。
如何解决此警告?
答案 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文件,所有内容都是构建的。