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?
3 Réponses :
Ce que j'utiliserais habituellement dans les tests unitaires est un package appelé Avec cela, vous pouvez faire ce qui suit pour générer une grande chaîne: AutoFixture a >. string.Join(string.Empty, Fixture.CreateMany<char>(length))
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.
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);
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.