14

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

    };
}
4

2 回答 2

10

在这篇博文这里的帮助下得到了它。

解决方案是在 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] 代码时引发错误。

于 2013-04-22T20:50:12.997 回答
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>

解决方案

系统假货

 <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。

于 2014-11-12T22:32:33.513 回答