Подтвердить что ты не робот

Прокладки не генерируются для методов .NET

Когда я начал использовать Microsoft Fakes, я был очень рад начать работу с некоторыми методами .NET. Мне повезло, что я смогу прошить любой метод .NET, статический или нет: http://msdn.microsoft.com/en-us/library/hh549176.aspx.

Тем не менее, я пытаюсь подделать некоторые из методов в TcpClient и создаются только заглушки, что делает меня нехорошим, так как я хочу иметь возможность изменять некоторые из методов, чтобы возвращать мои собственные данные, а не зависать на живой TcpClient, чтобы дать мне данные.

Я открыт для любых предложений о том, как это сделать, если есть другой путь за пределами Microsoft Fakes.

EDIT: добавление кода для демонстрации проблемы

[TestMethod]
public void CommunicationTest()
{
    var stubbedTcpClient = new System.Net.Sockets.Fakes.StubTcpClient
    {

    };

    //No such ShimTcpClient exists
    var shimmedTcpClient = new System.Net.Sockets.Fakes.ShimTcpClient
    {

    };
}
4b9b3361

Ответ 1

С помощью этот пост в блоге и здесь.

Решение заключалось в том, чтобы добавить классы, которые я хотел бы явно проложить в файле 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, когда он пытается закрепить [Устаревший] код.

Ответ 2

У меня также была та же проблема.

Мои 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.