不为.NET方法生成填充程序

时间:2013-04-22 18:31:20

标签: c# .net moles microsoft-fakes

当我开始使用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
    {

    };
}

2 个答案:

答案 0 :(得分:10)

使用this blog posthere的帮助。

解决方案是在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。