2017-07-26 3 views
0

La fonction ci-dessous utilise TryParse() pour analyser une valeur Console.Readline()Unit Test d'une fonction C# qui utilise Console.ReadLine()

public uint parse_input(string input) 
{ 
    uint parseNumber; 

    while (!uint.TryParse(input, out parseNumber)) 
    { 
     Console.Write("The value must be of integer type, please try again: "); 
    } 

    return parseNumber; 
} 

input est string input = Console.ReadLine(); défini dans un autre procédé.

Si j'entre une valeur erronée, je suis coincé dans une boucle lorsque la valeur d'entrée est définie.

Cependant, si je remplace input avec Console.ReadLine():

while (!uint.TryParse(Console.ReadLine(), out parseNumber)) 
{ 
    Console.Write("The value must be of integer type, please try again: "); 
} 

La fonction fonctionne, comme input returned est remplacé par System.Console.ReadLine retourné. Je veux être en mesure de tester cette fonction unitaire, donc idéalement, je voudrais savoir comment je l'ai initialement défini pour fonctionner. Des idées? Merci!

Répondre

1

Vous devez séparer la logique d'entrée/de sortie de la logique que vous souhaitez tester (puisque vous ne voulez pas tester le code d'infrastructure .net (ce n'est pas votre travail)). Mais cela nous laisse avec la question: qu'est-ce que vous voulez vraiment tester ici? Est-ce la logique "uint.TryParse (input, out parseNumber)"? Créez donc une classe qui s'occupe des entrées/sorties et affichez une interface agréable sur laquelle vous pouvez compter pour votre classe logique, vous pouvez ensuite la tester.