1
votes

Test unitaire d'une méthode avec une grande chaîne

J'utilise actuellement C #, mais je pense que la question s'applique à plus de langages.

J'ai une méthode qui prend une valeur de chaîne et lève une exception, si elle est trop grande. Je veux faire un test unitaire pour vérifier que l'exception est correcte.

int vlen = Encoding.UTF8.GetByteCount(value);
if (vlen < 0 || 0x0FFFFFFF < vlen)
   throw new ArgumentException("Valid UTF8 encodded value length is up to 256MB!", "value");

Quelle est la meilleure façon de générer une telle chaîne? Dois-je simplement avoir un fichier de cette taille? Dois-je créer un tel fichier à chaque fois que j'exécute des tests unitaires?


4 commentaires

Vous pouvez générer une chaîne à l'aide d'une boucle, d'un générateur de chaînes ou d'un tableau.


Pensez à utiliser un flux et un lecteur de flux au lieu d'avoir toute la chaîne en mémoire.


avez-vous besoin de tester <0 ?


@RufusL Je ne suis pas sûr, ce n'est pas mon code à l'origine. Je ne vois pas comment cela pourrait renvoyer une valeur négative ici.


3 Réponses :


0
votes

1
votes

Vous pouvez simplement utiliser un StringBuilder :

StringBuilder builder = new StringBuilder();
builder.Append('a', 0x10000000);
string s = builder.ToString();

//Console.WriteLine(s.Length);

YourMethodToTest(s);

Cela ne prend pas de temps mesurable sur ma machine et je suis sûr qu'il n'y aura pas de problème de performances sérieux sur votre machine non plus.


0 commentaires

3
votes

chaîne a un constructeur qui vous empêche de spécifier une longueur et un caractère à répéter:

string longString = new string('a',0x0FFFFFFF + 1);


0 commentaires