我目前正在使用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");
生成这样的字符串的最佳方法是什么?我应该有一个这么大的文件吗?每次运行单元测试时都应该创建这样的文件吗?
答案 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))