2016-11-21 3 views
0

Je dois tester un projet C# qui repose sur plusieurs autres services Web. Pendant les tests unitaires, je ne veux pas faire d'appels aux services mais juste retourner une valeur fictive. J'essaie d'utiliser shim actuellement, mais je suis confronté à des problèmes. Le code actuel crée un client pour le service Web externe et appelle ensuite une méthodeUnité Test d'un service Web C# .Net en isolant les services Web dont il dépend

CSSFormTransformationClient client = new CSSFormTransformationClient(); 
MemoryStream stream = client.TransformToPDF(cssRequest); 

La définition du CSSFormTransformationClient est générée par l'outil SvcUtil.exe et a une TransformToPDF méthode comme suit

public System.IO.MemoryStream TransformToPDF(Mycompany.Enterprise.Reporting.ServiceReferences.CssTransformation.TransformRequest transformRequest) 
{ 
    return base.Channel.TransformToPDF(transformRequest); 
} 

maintenant, je suppose que je pourrais utiliser shim de la manière suivante pour se moquer d'une valeur de retour pour transformToPDF

ServiceReferences.CssTransformation.Fakes.ShimCSSFormTransformationClient.AllInstances.TransformToPDF =() => { } 

Mais il ne me laisse pas. Quelqu'un me dit comment je me moque de la méthode transformToPDF?

Merci.

P.S - Ce projet utilise WCF.

+0

J'ai ajouté l'assemblage faux et tout .. manque juste la bonne façon de s'y prendre .. –

+0

Pouvez-vous définir « Ne me laisse pas »? Recevez-vous une erreur ou un autre message? Quel est le problème exactement? Aussi, avez-vous essayé le Moq? – Brandon

+0

@Brandon _ServiceReferences.CssTransformation.Fakes.ShimCSSFormTransformationClient.AllInstances_ après cela, il me donne juste deux options de "égale" et "référence égale". VS le souligne en rouge si au cas où je ferais autre chose. Je n'ai pas essayé de me moquer. Étant donné la petite description et l'ajustement général de moq dans l'isolement de ces services, suggérerait que sur les cales? –

Répondre

0

Par mon commentaire: essayez ceci avec Moq (Available on NuGet).

using Moq; 
using TransformRequest = Mycompany.Enterprise.Reporting.ServiceReferences.CssTransformation.TransformRequest; 

private MemoryStream _toReturn; 

public void SetupTest() 
{ 
    this._toReturn = new MemoryStream();  
} 
public void TearDownTest() 
{ 
    if (this._toReturn != null) 
    { 
     this._toReturn.Dispose(); 
    } 
} 

public void YourTestMethod() 
{ 
    var client = new Mock<CSSFormTransformationClient>(); 

    client.Setup(c => c.TransformToPDF(It.IsAny<TransformRequest>()) 
      .Returns(this._toReturn); 

    MemoryStream stream = client.TransformToPDF(cssRequest); //Get cssRequest beforehand... I don't know where it came from. 

    //Continue with your test. 
} 
+0

Très bien! Je vous remercie! Je vais essayer. :) –