使用大字符串对方法进行单元测试

时间:2019-02-25 15:44:22

标签: c# string unit-testing

我目前正在使用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 :(得分:2)

string有一个constructor,以免您指定长度和重复的字符:

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

答案 1 :(得分:1)

您可以简单地使用StringBuilder

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

//Console.WriteLine(s.Length);

YourMethodToTest(s);

这在我的机器上没有可测量的时间,而且我敢肯定您的机器上也不会出现严重的性能问题。

答案 2 :(得分:0)

我通常在单元测试中使用的是称为this的软件包。

您可以执行以下操作来生成大字符串:

string.Join(string.Empty, Fixture.CreateMany<char>(length))