2011-08-17 5 views
0

Je commence à utiliser Mocking avec FakeItEasy et je suis coincé à un moment donné.Scripts de test pour la fonction avec la boucle for

j'avoir des interfaces ci-dessous

public interface IPrint { 
    void Print(int start = 1, int end = 100); 
} 

public interface IConverter { 
    string Convert(int number); 
} 

Ci-dessous la mise en œuvre de IPrint:

public class PrintNumbers : IPrint { 
    public IConverter Converter { get; set; } 
    public PrintNumbers(IConverter converter) { 
     this.Converter = converter; 
    } 
    public void Print(int start = 1, int end = 100) 
    { 
     for (int count = start; count <= end; count++) 
      Console.WriteLine("{0}", this.Converter.Convert(count));   
    }  
} 

Je veux écrire des tests pour la méthode d'impression, voulez-vous s'il vous plaît conseiller anything.I voulez vous assurer que pour la boucle doit être appelé avec count = start (premier paramètre) et compter < fin dernier paramètre, le nombre doit être incrémenté, Converter.convert (count) doit être appelé

+1

Qu'avez-vous essayé? Stack Overflow est un site web pour discuter de * questions spécifiques * relatives à la programmation; ce n'est pas un «service de code libre». S'il vous plaît ne posez pas de questions comme ça. –

Répondre

1

Je ne suis pas sûr de ce que vous voulez tester, ce convertisseur.Convert a été appelé? Pourquoi est-ce important? Pour moi, il ressemble à ce qui est important est que Console.WriteLine a été appelé avec chaque valeur convertie. Il y a quelques techniques pour faire cela, l'une serait d'injecter une interface IOutputWriter avec une méthode WriteLine, l'implémentation par défaut de ce serait simplement déléguer à Console.WriteLine, dans votre test vous utiliseriez un faux instaed.

Une autre possibilité consiste à rediriger la sortie standard (Console.Out) vers un graveur de texte de votre choix et de vous y opposer. Jetez un oeil à Roy Osherove's TDD Kata 2 qui traite de ce problème spécifique. Il y a cependant d'autres situations où vous voulez affirmer qu'une certaine méthode a été appelée avec des valeurs spécifiques, donc je vais donner un exemple d'un test qui ferait cela avec l'exemple donné (bien que je pense que ce ne serait pas la bonne chose à tester dans ce cas précis).

var converter = A.Fake<IConverter>(); 
var printer = new PrintNumbers(converter); 

printer.Print(1, 3); 

A.CallTo(() => converter.Convert(1)).MustHaveHappened(); 
A.CallTo(() => converter.Convert(2)).MustHaveHappened(); 
A.CallTo(() => converter.Convert(3)).MustHaveHappened(); 

Je ne suis pas sûr que c'est un excellent exemple bien puisque ce serait un essai sur beaucoup.

Questions connexes