2013-04-22 9 views
13

Kiedy zacząłem używać Microsoft Fakes, byłem podekscytowany rozpoczęciem zmiany niektórych metod .NET. Byłem pozwalają przypuszczać, że będę w stanie pasowana Każda metoda .NET, statyczne lub nie: http://msdn.microsoft.com/en-us/library/hh549176.aspx.Podkładki nie są generowane dla metod .NET

Jednak próbowałem shim niektóre z metod w TcpClient i tylko stubs są tworzone, co mnie nie dobrze, ponieważ chcę być w stanie zmienić niektóre z metod, aby zwrócić moje własne dane, a nie w zależności od bieżącego TcpClient, aby przekazać mi dane.

Jestem otwarty na wszelkie sugestie, jak to zrobić, jeśli jest inny sposób niż Microsoft Fakes.

EDIT: Dodawanie kodu do wykazania problemu

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

    }; 

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

    }; 
} 
+0

można udostępniać kod? Lub przynajmniej wystarczająco, aby zademonstrować problem? –

+0

Dodałem kod shim TcpClient, który mam nadzieję wygenerować –

+0

Jaką metodę próbujesz podpalić? Jeśli jest to wirtualne, możesz użyć [NSubstitute] (http://nsubstitute.github.io/), jeśli nie utkniesz przy użyciu podróbek. –

Odpowiedz

10

dostał pracę z pomocą this blog post i here.

Rozwiązaniem było dodanie klas, które chciałem wyraźnie podać w pliku System.fakes. To właśnie kopalnia wygląda teraz:

<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" jest zatrzymanie błędy z wyrzucane przez kod generacji Shim, kiedy próbuje pasowana [Przestarzałe] kod.

0

Też miałem ten sam problem.

My System.fakes i mscorlib.fakes wyglądał następująco:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/"> 
    <Assembly Name="mscorlib" Version="4.0.0.0"/> 
    <ShimGeneration> 
    <Add Namespace="System.ComponentModel.BackgroundWorker"/> 
    </ShimGeneration> 
</Fakes> 

i

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/"> 
    <Assembly Name="System" Version="4.0.0.0"/> 
    <ShimGeneration> 
    <Add Namespace="System.ComponentModel.BackgroundWorker"/> 
    </ShimGeneration> 
</Fakes> 

Rozwiązanie

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> 

i po zapisaniu plików Odbudowuję rozwiązanie. A teraz mam ShimBackgroundWorker.

+0

Używam VS.Net Ostatecznego 2012 – Fery

+0

zmieniłem pliki jak poniżej i mam teraz ShimBackgroundWorker – Fery

+0

Ważna uwaga: „. Wykrzyknik na końcu FullName jest opcjonalny Bez niej generator kodu Podróbki rozważy wszystkie typy, które zaczynają z podanym ciągiem znaków, wykrzyknik informuje generator kodu, aby szukał dokładnego dopasowania." [Źródło] (https://social.msdn.microsoft.com/Forums/vstudio/en-US/0b0d14bc-9ae6-4a6a-943a-6c19a3969640/switching-from-moles-to-fakes-mwindowsidentity-to- shimwindowsidentity? forum = vsunittest) –

Powiązane problemy