Прокладки не создаются для методов.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.