Модульное тестирование метода с большой строкой - PullRequest
0 голосов
/ 25 февраля 2019

В настоящее время я использую C #, но я считаю, что вопрос относится к большему количеству языков.

У меня есть метод, который принимает строковое значение и выдает исключение, если оно слишком велико.Я хочу провести модульное тестирование, чтобы исключение было правильным.

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

Каков наилучший способ создания такой строки?Должен ли я просто иметь файл такого размера?Должен ли я создавать такой файл каждый раз при запуске юнит-тестов?

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Вы можете просто использовать StringBuilder:

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

//Console.WriteLine(s.Length);

YourMethodToTest(s);

Это не займет измеримое время на моей машине, и я уверен, что серьезных проблем с производительностью не будетваша машина тоже.

0 голосов
/ 25 февраля 2019

string имеет конструктор , чтобы вы не указали длину и символ повторения:

string longString = new string('a',0x0FFFFFFF + 1);
0 голосов
/ 25 февраля 2019

В модульных тестах я обычно использовал бы пакет под названием AutoFixture.

. С его помощью вы можете сделать большую строку:

string.Join(string.Empty, Fixture.CreateMany<char>(length))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...