单元测试的Unicode测试字符串
Unicode test strings for unit tests
我需要一些Utf32测试字符串来练习一些跨平台的字符串操作代码。我想要一套测试字符串,用于执行utf32<->utf16<->utf8编码,以验证BMP之外的字符可以从utf32转换,通过utf16代理,通过utf8,再转换回来。正确地
如果有问题的字符串不仅仅由随机字节组成,而且在它们编码的(各种)语言中都有意义,我总是觉得这会更优雅一些。
虽然这不是您所要求的,但我一直觉得这个测试文档很有用。
http://www.cl.cam.ac.uk/~mgk25/ucs/示例/UTF-8-test.txt
同一网站提供此
http://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt
这相当于英语的"Quick brown fox"文本,它练习了各种语言中使用的所有字符。这个页面引用了维基百科上的一个更大的"穿山甲"列表,但显然在那里被删除了。它仍然在这里可用:
http://clagnut.com/blog/2380/
https://github.com/noct/cutf/tree/master/bin
包括以下文件:
UTF-8-demo.txt
big.txt
quickbrown.txt
utf8_invalid.txt
要真正测试格式之间所有可能的转换,而不是字符转换(即towupper()
、towlower()
),您应该测试所有字符。下面的循环提供了所有这些:
for(wint_t c(0); c < 0x110000; ++c)
{
if(c >= 0xD800 && c <= 0xDFFF)
{
continue;
}
// here 'c' is any one Unicode character in UTF-32
...
}
这样你就可以确保你不会错过任何东西(即100%完成测试。)这只有1112065个字符,所以用现代计算机会很快。
注意,对于编码之间的基本转换,我上面的循环已经足够了。然而,Unicode中还有其他功能,需要测试在一起使用时表现为不同的字符对。这在这里真的没有必要。
此外,我现在有一个单独的C++libutf8库,用于在UTF-32、UTF-16和UTF-8之间转换字符。测试使用如上所示的循环。测试还验证使用无效字符代码是否被正确捕获。
嗯
你可以通过谷歌搜索找到很多附带的数据(在SO…上,类似问题请参见右栏)
不过,我建议您将测试字符串构建为字节数组。这实际上并不是关于"什么数据",只是unicode得到了正确的处理。
例如,您需要确保不同规范化形式(即,即使不是规范化形式)的相同字符串比较起来仍然相等。
您需要检查字符串长度检测是否稳健(能够识别单字节、双字节、三字节和四字节字符)。您需要检查从开始到结束遍历字符串是否遵循相同的逻辑。针对unicode字符随机访问的更有针对性的测试。
我相信这些都是你知道的。我把它们拼出来只是为了提醒您,您需要完全满足边缘情况的测试数据,即Unicode固有的逻辑属性。
只有这样,您才能获得正确的测试数据。
超出这个范围(技术上正确的Unicode处理)是实际的本地化(排序、字符集转换等)
以下是有用的链接:
- http://minaret.info/test/collate.msp
- http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html
你可以试试这个(有一些俄语、希腊语、汉语等句子来测试Unicode):
http://www.madore.org/~david/misc/unitest/
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- isPalindrome不显示输出,isPalindrome函数未使用字符串输入作为字符串参数进行测试
- 查找不适用于 c++ 中特定测试用例的最长子字符串
- 键入特征样式以测试 T 是basic_string<>还是可打印的类似字符串的类型?
- 如何测试字符串的第一个字母是否"A" C++?
- 在C++测试家庭作业问题中的字符串输入时无法退出循环(作为数据验证)
- 在字符串向量中测试INT
- 如何测试字符串是否是有效的C++(ish)表达式
- 谷歌测试:无法从字符数组创建字符串
- 测试字符串是数字还是字符
- 谷歌测试文档 C 字符串和字符串
- C#和C++中字符串操作的不同基准测试
- 使用堆栈测试字符串中的x和y是否相等
- 如何测试输入是字符串还是int
- 进行字符串前缀测试的优雅方法
- 如何在提升单元测试中比较字符*与字符串
- 从字符串流读取和写入自定义对象时测试失败
- Qt单元测试输出字符串长度截止
- 在 c++ 中测试字符串数组的索引
- 元正则表达式:测试正则表达式是否只是一个字符串(没有正则表达式"wildcards")