J'essaie d'écrire un test unitaire pour une classe qui génère des chaînes distinctes. Ma première réaction a été la suivante:Unité testant une classe qui génère des chaînes distinctes
public void GeneratedStringsShouldBeDistinct()
{
UniqueStringCreator stringCreator = new UniqueStringCreator();
HashSet<string> generatedStrings = new HashSet<string>();
string str;
for (int i = 0; i < 10000; i++)
{
str = stringCreator.GetNext();
if (!generatedStrings.Add(str))
{
Assert.Fail("Generated {0} twice", str);
}
}
}
J'aimé cette approche parce que je savais que l'algorithme sous-jacent n'a pas utilisé tout hasard, donc je ne suis pas dans une situation où il risque d'échouer une fois, mais réussir la prochaine - mais qui pourrait être remplacé par quelqu'un dans le futur. OTOH, le test de tout algorithme aléatoire provoquerait ce type d'incohérence de test, alors pourquoi ne pas le faire de cette façon? Dois-je simplement sortir 2 éléments et vérifier la distinction (en utilisant une philosophie 0/1/Beaucoup)?
Avez-vous d'autres opinions ou suggestions?