ShimDateTime在System.Fakes中不可用
本文关键字:Fakes System ShimDateTime | 更新日期: 2023-09-27 18:12:59
我正在学习如何在单元测试中使用shims。我正在尝试DateTime的经典例子,从这个链接:http://www.wiliam.com.au/wiliam-blog/getting-started-with-microsoft-fakes
我可以在我的单元测试项目中为System引用添加Fakes,但是当我尝试使用System.Fakes时。ShimDateTime,它告诉我:
The type or namespace name 'ShimDateTime' does not exist in the namespace 'System.Fakes' (are you missing an assembly reference?)
如果我检查系统下有什么可用。假的,我只看到存根和没有垫片,所以我似乎错过了一些东西来产生垫片?
不确定是否相关,但这是来自系统的(默认)内容。假货文件:
<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框架4.5.2
事实上,我的项目在为System添加fakes后未能立即编译,因此甚至没有尝试使用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。[mqttf::Microsoft.QualityTools.Testing.Fakes.Stubs.StubClass] (typeof(global:: system . em.Diagnostics.Traci·ng. eventsourcecereate·dEventArgs))]
任何人都可以把我放在正确的轨道上,让ShimDateTime在系统下可用。假货?
我能够在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>
我相信这是因为,正如MSDN上显示的,System。DateTime实际上在mscorlib
组件中
根据https://connect.microsoft.com/VisualStudio/feedback/details/1049181/fakes-cant-generate-fakes-dlls-for-system-dll,这是。net Framework 4.5中的一个bug。
将。net Framework更改为4.5.2确实为我解决了这个问题。
我可以通过手动添加对mscorlib.4.0.0.0. faks .dll的引用来解决这个问题,因为某些原因默认情况下不包含该引用。
来源:http://www.infoct.net/vs2015-unit-testing-shimdatetime-missing-in-system-fakes-only-stub-functions-743/