我应该使用哪些测试对csv解析器进行单元测试?
我在C#中有一个简单的csv解析器,并且我想确保我对所有常见(和不常见)边缘情况都具有良好的单元测试覆盖率。我应该使用哪些测试来识别潜在问题和边界案例?
我应该使用哪些测试对csv解析器进行单元测试?
我在C#中有一个简单的csv解析器,并且我想确保我对所有常见(和不常见)边缘情况都具有良好的单元测试覆盖率。我应该使用哪些测试来识别潜在问题和边界案例?
Answers:
我刚刚找到https://github.com/maxogden/csv-spectrum:
一堆不同的CSV文件,可以用作CSV解析库的酸性测试。还有CSV的JSON版本用于验证。
该存储库的目标是捕获测试用例以代表整个CSV频谱。
这是一些您应该深思熟虑并具有测试用例的边界情况。
,foo,
,"foo",
,"foo\nbar"
,"foo,bar"
,"foo""bar"
,,
则应为null并,"",
提供一个空字符串。CSV文件没有正式的规范。但是,请看一下RFC 4180-CSV文件的通用格式和MIME类型(尤其是第2部分),该文档记录了大多数实现似乎遵循的格式。
从第2节中的列表开始生成一些测试用例似乎相当简单,特别是:
每个记录位于单独的行上,并由换行符(CRLF)分隔。例如:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
文件中的最后一条记录可能有也可能没有换行符。例如:
aaa,bbb,ccc CRLF zzz,yyy,xxx
可能有一个可选的标题行出现在文件的第一行,其格式与普通记录行相同。该标头将包含与文件中的字段相对应的名称,并且应包含与文件其余部分中的记录相同的字段数(应通过此标头的可选“ header”参数指示标头行的存在或不存在) MIME类型)。例如:
field_name,field_name,field_name CRLF aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
在标题和每条记录中,可能会有一个或多个字段,以逗号分隔。每行应在整个文件中包含相同数量的字段。空格被视为字段的一部分,不应忽略。记录中的最后一个字段不得在逗号后跟。例如:
aaa,bbb,ccc
每个字段可能会或可能不会用双引号引起来(但是,某些程序(例如Microsoft Excel)根本不使用双引号)。如果字段没有用双引号引起来,则双引号可能不会出现在字段内。例如:
“ aaa”,“ bbb”,“ ccc” CRLF zzz,yyy,xxx
包含换行符(CRLF),双引号和逗号的字段应用双引号引起来。例如:
“ aaa”,“ b CRLF bb”,“ ccc” CRLF zzz,yyy,xxx
如果使用双引号将字段括起来,则必须在字段内部出现双引号,方法是在其前面加上另一个双引号来对其进行转义。例如:
“ aaa”,“ b”,“ bb”,“ ccc”
我已经做了一段时间了。当然,要进行良好的测试已经很奇怪了,其中有无数的测试。
检出此目录,并查看* .t文件中的代码。:
http://cpansearch.perl.org/src/MAKAMAKA/Text-CSV-1.32/t/
(版本号-1.32最终可能会更改,因此链接可能会变为“死”。您可以通过反复试验自行增加版本号,或者转到父目录或单击此处。
https://metacpan.org/pod/Text::CSV
并通过“浏览”单击以找到最新版本的源代码)
Text :: CSV_XS是成熟的perl模块,用于解析csv文件。* .t文件是用Perl 5编写的,它们包含许多用于模块自检的测试用例,它们将在模块安装时执行。