当我开始使用Microsoft Fakes时,我很高兴开始填补一些.NET方法。我始终相信我能够使用任何.NET方法,静态或不静态:http://msdn.microsoft.com/en-us/library/hh549176.aspx。
但是,我一直试图在TcpClient中填充一些方法,只创建了存根,这对我没有好处,因为我希望能够改变一些方法来返回我自己的数据而不是依赖在一个直播的TcpClient上给我数据。
如果还有其他超越Microsoft Fakes的方法,我愿意接受有关如何执行此操作的任何建议。
编辑:添加代码以演示问题
[TestMethod]
public void CommunicationTest()
{
var stubbedTcpClient = new System.Net.Sockets.Fakes.StubTcpClient
{
};
//No such ShimTcpClient exists
var shimmedTcpClient = new System.Net.Sockets.Fakes.ShimTcpClient
{
};
}
答案 0 :(得分:10)
使用this blog post和here的帮助。
解决方案是在System.fakes文件中添加我想要显式填充的类。这就是我现在的样子:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="System" Version="4.0.0.0"/>
<ShimGeneration>
<Clear/>
<Add FullName="System.Net.Sockets.TcpClient"/>
<Remove Obsolete="1"/>
</ShimGeneration>
</Fakes>
Remove Obsolete="1"
用于阻止Shim生成代码在尝试填充[Obsolete]代码时抛出错误。
答案 1 :(得分:1)
我也有同样的问题。
我的System.fakes和mscorlib.fakes看起来像这样:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<ShimGeneration>
<Add Namespace="System.ComponentModel.BackgroundWorker"/>
</ShimGeneration>
</Fakes>
和
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="System" Version="4.0.0.0"/>
<ShimGeneration>
<Add Namespace="System.ComponentModel.BackgroundWorker"/>
</ShimGeneration>
</Fakes>
System.fakes
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="System" Version="4.0.0.0"/>
<ShimGeneration>
<Add FullName="System.ComponentModel.BackgroundWorker!"/>
</ShimGeneration>
</Fakes>
mscorlib.fakes
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<ShimGeneration>
<Add FullName="System.ComponentModel.BackgroundWorker!"/>
</ShimGeneration>
</Fakes>
并在保存文件后重建解决方案。现在我有了ShimBackgroundWorker。