2010-04-02 10 views
2

Considérez la définition de classe suivante:cas de test pour tester une fonction strtok-alike [C++]

class StrToTokens { 
    StrToTokens(const char* str, const char* delimiters = "\t\r\n"); //constructor 
    string getNextToken(); 
    void reset(); 
    bool empty(); 
} 

Quelqu'un peut-il la liste des bons testcases pour tester la classe ci-dessus.

Quelques-uns que je pourrais penser à sont:
chaîne vide, délimiteurs vides, délimiteurs répétés, délimiteurs consécutifs, chaîne avec seulement des délimiteurs. Cependant, l'intervieweur s'attendait à un peu plus (de meilleurs). Pouvez-vous aider.

Merci.

+0

J'ai une question à votre interlocuteur: lorsque deux délimiteurs se suivent, souhaitez-vous pour récupérer une chaîne vide ou voulez-vous sauter tout à fait? 'split' en Python donne une chaîne vide. –

+0

ouais il voulait que je code un split-alike (perl) fuction .. je suppose qu'il est similaire en python – sud03r

Répondre

3

Eh bien, j'ai l'habitude d'ajouter au moins un testcase qui teste juste pour un cas de travail normal. Et bien sûr, tous les tests que vous avez mentionnés juste là pour le constructeur. Les autres méthodes doivent être testés ainsi:

  • ne réinitialise vraiment reset (ce qui est remis à zéro destiné à faire de toute façon)
  • ne se conduit vide comme prévu
  • sont des jetons récupérés dans le droit chemin/ordre

je mets en œuvre habituellement quelques testcases plus complexes pour tester de telles choses, telles que

Initialize 
read a token 
reset 
read a token 

Ou

Initialize 
read all tokens 
check empty 
+0

vous voulez dire ceci ... 'initialize - read value1 - reset - read value2' value1 doit être égal à la valeur 2." un bon! btw " – sud03r

+1

Ajouter à la liste un test pour appeler' getNextToken () 'plus de fois qu'il n'y a de jetons (je ne sais pas quel serait le comportement souhaité pour cela, mais quoi que ce soit il faut tester). –

2

Si vous recherchez des cas limites, je vérifiaient la suivante .. Certains d'entre eux vous avez déjà venu avec, mais je ne pense pas qu'il y ait plus de cas « edgy » que ce qui suit:

StrToTokens(NULL); 
StrToTokens("a", NULL); 
StrToTokens("a", "\0"); 
StrToTokens("", ""); 
StrToTokens("abc", "abc"); 
+0

et peut-être des combinaisons de ceux-ci .. ouf! le test est difficile – sud03r

Questions connexes