2013-04-22 14 views
13

Quando ho iniziato a utilizzare Microsoft Fakes, ero entusiasta di iniziare a modificare alcuni metodi .NET. Ero portato a credere che sarei stato in grado di shimare QUALSIASI metodo .NET, statico o meno: http://msdn.microsoft.com/en-us/library/hh549176.aspx.Gli shim non vengono generati per i metodi .NET

Tuttavia, ho cercato di ridurre alcuni dei metodi in TcpClient e vengono creati solo stub, il che non mi fa bene, poiché voglio essere in grado di modificare alcuni metodi per restituire i miei dati piuttosto che a seconda di un TcpClient attivo per darmi dati.

Sono aperto a qualsiasi suggerimento su come farlo se c'è un altro modo oltre Microsoft Fakes.

EDIT: Aggiunta di codice per dimostrare il problema

[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

Puoi condividere il tuo codice? O almeno abbastanza per dimostrare il problema? –

+0

Ho aggiunto il codice shim TcpClient che spero di generare –

+0

Che metodo stai provando a shimare? Se è virtuale puoi usare [NSubstitute] (http://nsubstitute.github.io/), se non sei bloccato usando Fakes. –

risposta

10

ottenuto che funziona con l'aiuto di this blog post e here.

La soluzione era aggiungere le classi che volevo ridurre in modo esplicito nel file System.fakes. Questo è ciò che il mio appare come ora:

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

Il Remove Obsolete="1" è quello di fermare gli errori da essere gettato dal codice generazione Shim quando tenta di spessorare codice [obsoleto].

0

Ho anche avuto lo stesso problema.

mio System.fakes e mscorlib.fakes si presentava così:

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

e

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

Soluzione

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> 

e dopo aver salvato i file Ricostruisci la soluzione. E ora ho ShimBackgroundWorker.

+0

Sto usando VS.Net Ultimate 2012 – Fery

+0

Ho cambiato i file come di seguito e ho ShimBackgroundWorker ora – Fery

+0

Nota importante: "Il punto esclamativo alla fine di FullName è opzionale. Senza di esso, il generatore di codici Fakes considererà tutti i tipi che iniziano con la stringa specificata Il punto esclamativo indica al generatore di codice di cercare una corrispondenza esatta." [Origine] (https://social.msdn.microsoft.com/Forums/vstudio/en-US/0b0d14bc-9ae6-4a6a-943a-6c19a3969640/switching-from-moles-to-fakes-mwindowsidentity-to- shimwindowsidentity? forum = vsunittest) –

Problemi correlati