ShimDateTime在System.Fakes

时间:2016-10-14 08:59:32

标签: c# unit-testing shim

我正在学习在单元测试中使用垫片。 我在这个链接中尝试使用DateTime的经典示例: http://www.wiliam.com.au/wiliam-blog/getting-started-with-microsoft-fakes

我可以在单元测试项目中为系统引用添加Fakes,但是当我尝试使用System.Fakes.ShimDateTime时,它告诉我:

The type or namespace name 'ShimDateTime' does not exist in the namespace 'System.Fakes' (are you missing an assembly reference?)

如果我查看System.Fakes下可用的内容,我只会看到存根和没有垫片,所以我似乎错过了生成垫片的东西吗?

不确定它是否相关,但这是System.fakes文件中的(默认)内容:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="System" Version="4.0.0.0"/>
</Fakes>

我正在使用Visual Studio 2015。 VS2015 14.0.25420.01更新3,我的项目在.NET Framework 4.5.2中运行

实际上我的项目在添加System的假货之后无法正确编译,因此甚至没有尝试使用ShimDateTime。我得到的编译错误是:

 The type or namespace name 'EventSourceCreatedEventArgs' does not exist in the namespace 'System.Diagnostics.Tracing' (are you missing an assembly reference?)

这来自\ UnitTestProject1 \ obj \ Debug \ Fakes \ m \ f.csproj和文件f.cs在线:[mqttf :: Microsoft.QualityTools.Testing.Fakes.Stubs.StubClass(typeof(global: :Syst em.Diagnostics.Traci ng.EventSourceCreate dEventArgs))]

任何可以让我走上正确轨道的人都可以在System.Fakes下获得ShimDateTime吗?

3 个答案:

答案 0 :(得分:6)

我能够在Visual Studio 2015 Update 3上为.NET 4.5.2项目解决此问题:

error CS0234: The type or namespace name 'ShimDateTime' does not exist in the namespace 'System.Fakes' (are you missing an assembly reference?)

修复方法是将条目实际添加到mscorlib.fakes XML文件中(而不是您在System.fakes中假设的那样)

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/"  Diagnostic="false">
  <Assembly Name="mscorlib" Version="4.0.0.0" />
  <StubGeneration>
    <Clear />
  </StubGeneration>
  <ShimGeneration>
    <Clear />
    <Add FullName="System.DateTime!" />
  </ShimGeneration>
</Fakes>

我认为这是因为,如here on MSDN所示,System.DateTime实际上在mscorlib程序集中。

答案 1 :(得分:3)

根据https://connect.microsoft.com/VisualStudio/feedback/details/1049181/fakes-cant-generate-fakes-dlls-for-system-dll,这是.NET Framework 4.5中的一个错误。

将.NET Framework更改为4.5.2确实为我解决了这个问题。

答案 2 :(得分:3)

我能够通过手动添加对mscorlib.4.0.0.0.Fakes.dll的引用来解决这个问题,默认情况下不会出现这种情况。

感谢:http://www.infoct.net/vs2015-unit-testing-shimdatetime-missing-in-system-fakes-only-stub-functions-743/