我正在学习在单元测试中使用垫片。
我正在通过以下链接尝试使用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下的可用内容,那么我只会看到 stub 并且没有垫片,因此看来我也缺少生成垫片的内容吗?

不确定是否相关,但这是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?

最佳答案

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

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程序集中。

关于c# - ShimDateTime在System.Fakes中不可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40039081/

10-10 16:15