2013-04-22 9 views
13

Als ich anfing, Microsoft Fakes zu verwenden, war ich aufgeregt, einige .NET-Methoden zu shimmen. Ich wurde davon überzeugt, dass ich in der Lage wäre, jede .NET-Methode, egal ob statisch oder nicht, zu shimpfen: http://msdn.microsoft.com/en-us/library/hh549176.aspx.Shims werden nicht für .NET-Methoden generiert

Allerdings habe ich versucht, einige der Methoden in TcpClient Shim und nur Stubs erstellt werden, was mir nicht gut tut, da ich in der Lage sein, einige der Methoden zu ändern, meine eigenen Daten zurückgeben statt abhängig von einem Live-TcpClient, um mir Daten zu geben.

Ich bin offen für alle Vorschläge, wie dies zu tun ist, wenn es einen anderen Weg als Microsoft Fakes gibt.

EDIT: Code Hinzufügen des Problems

[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

Können Sie Ihren Code teilen? Oder zumindest genug, um das Problem zu demonstrieren? –

+0

Ich habe den TcpClient Shim Code hinzugefügt, den ich zu generieren hoffe –

+0

Welche Methode versuchen Sie zu shim? Wenn es virtuell ist, können Sie [NSubstitute] (http://nsubstitute.github.io/) verwenden, wenn Sie nicht mit Fälschungen arbeiten. –

Antwort

10

Got demonstrieren sie mit Hilfe von this blog post und here arbeiten.

Die Lösung bestand darin, die Klassen hinzuzufügen, die ich explizit in der Datei System.fakes shim wollte. Das ist, was mir jetzt aussieht:

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

Die Remove Obsolete="1" ist es, Fehler zu verhindern, durch die Shim Generation Code ausgelöst wird, wenn es versucht, [Obsolete] Code Shim.

0

Ich hatte auch das gleiche Problem.

Mein System.fakes und mscorlib.fakes sah wie folgt aus:

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

und

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

Lösung

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> 

und nach dem Speichern der Dateien I Rebuild die Lösung. Und jetzt habe ich ShimBackgroundWorker.

+0

Ich benutze VS.Net Ultimate 2012 – Fery

+0

Ich änderte die Dateien wie unten und ich habe jetzt ShimBackgroundWorker – Fery

+0

Wichtiger Hinweis: "Das Ausrufezeichen am Ende von FullName ist optional. Ohne es wird der Fakes-Code-Generator alle Typen berücksichtigen, die starten mit der angegebenen Zeichenfolge Das Ausrufezeichen weist den Code-Generator an, nach einer genauen Übereinstimmung zu suchen." [Quelle] (https://social.msdn.microsoft.com/Forums/vstudio/en-US/0b0d14bc-9ae6-4a6a-943a-6c19a3969640/switching-from-moles-to-fakes-mwindowsidentity-to- shimwindowsidentity? Forum = vsunittest) –