2012-10-19 1 views
6

je l'interface suivante:FakeItEasy - Est-il possible d'intercepter une méthode et de la remplacer par ma propre implémentation?

public interface IOuputDestination 
{ 
    void Write(String s); 
} 

Dans mon test unitaire, je me moque comme si:

var outputDestination = A.Fake<IOutputDestination>(); 

Ce que je veux faire, est d'intercepter la méthode Write pour qu'il utilise mon habitude implémentation que je définis dans mon test. Quelque chose comme ceci:

String output = ""; 
A.CallTo(() => outputDestination.Write(A<String>.Ignored)).Action(s => output += s); 
       //Is something like this even possible ? ----^ 

Voici la méthode Action n'existe pas, mais ce que je voudrais arriver est que tout paramètre passé dans outputDestination.Write être redirigé vers mon action personnalisée. Est-ce possible en utilisant FakeItEasy? Sinon, y a-t-il un autre cadre moqueur qui permet ce genre de comportement?

Répondre

7

Vous pouvez obtenir ce comportement avec Invokes:

String output = ""; 
A.CallTo(() => outputDestination.Write(A<String>.Ignored)) 
    .Invokes((string s) => output += s); 
0

vous ne vous présentez pas vraiment comment vous utilisez outputDestination une fois que vous avez créé. Souhaitez-vous l'injecter dans une méthode sous test? Si oui, alors que faire si, au lieu de créer un faux, vous créez une classe spécialement conçue qui implémente IOutputDestination et qui contient votre implémentation requise de Write()?

Je suppose que cela dépendrait de ce que (le cas échéant) d'autres comportements que vous devez vérifier sur votre faux. C'est difficile de savoir sans plus de contexte.

Questions connexes