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

Когда я начал использовать 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 ответа

Решение

Получил работу с помощью этого поста в блоге и здесь.

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

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

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

Другие вопросы по тегам