2009-11-20 86 views
3

我在如何单元测试解析文件中挣扎了一番...假设我有一个包含25列的文件,这个文件可以是20-1000条记录长的任意位置......我如何编写一个单元测试?该函数将文件作为字符串作为参数,并返回一个带有文件内容的DataTable ...单元测试文件解析例程?

我能想到的最好解析4记录文件,只检查左上角和右下角' ...例如前2个记录中的前几个字段和2个底部记录中的最后几个字段......我无法想象必须对文件中的每个字段进行繁琐的手型断言语句。只做一个记录,每个领域看起来都很薄弱,因为它没有考虑多个记录文件或意外数据的情况。

当时看起来'够用'了......但是现在我正在研究一个新的项目,它基本上解析了来自10个不同来源的各种PDF文件,每个来源都有4-6种不同的格式为他们的文件,所以约40-60分析例程。我们最终可能会完全自动化其他25个来源。我们采用PDF并使用第三方工具将其转换为excel ..然后,我们坐下来分析输出中的模式,并编写调用该工具API的代码,获取excel文件并解析它 - 剥离垃圾,在不同地方对数据进行排序,清理等。

我真的可以测试类似这样的东西吗?

回答

3

我不确定我完全理解这个问题,但这里有一个想法。收集一堆代表不同格式和边缘情况的示例文件。运行转换到您的DataTables和第一次手动检查DataTables,以确保它们是正确的。然后将DataTable的序列化为XML格式,并将它们与您的测试用例PDF文件一起存储在单元测试套件中。

您的自动化单元测试可以执行从PDF到DataTable的转换,并将结果与​​相应的“批准的”序列化的DataTable表示进行比较。

您可以使用此方法随着时间建立一个测试文档库。单元测试中的失败将表明解析例程的更改已经打破了特定的边界情况。

虽然有一个'catch'。我的第一个 示例我正在讨论.NET 应用程序。然而,这个新项目 与40可能'擦洗 脚本'是用VBA编写.... 输入是一个Excel电子表格和 输出是一个Excel电子表格...如何 我可以序列化这?也许在整个文件上做一个 校验和?

因为如果Excel电子表格不是太复杂,你可以尝试创建通过细胞比较例程像this one单元格中的第二个例子;也许你可以把它包装到一个自定义的Assert.AreExcelWorksheetsEqual()中。你是对的,校验和也可以。

+0

这是个好主意 - 我没有想过对XML进行序列化/反序列化。然后,我不需要为整个文件中的每个单元格调用一次Assert()函数。只需要一个断言(或者是否必要的循环)以确保它匹配 – dferraro 2009-11-20 16:03:54

+0

尽管有一个“catch”。我是第一个讲述.NET应用程序的例子。 但是,这个带有40个可能'擦洗脚本'的新项目是用VBA编写的....输入是一个Excel电子表格,输出是一个Excel电子表格...我怎么能序列化这个?也许做整个文件的校验和? – dferraro 2009-11-20 16:06:37

+0

链接已死... :( – Shanimal 2016-03-25 14:51:30

2

当您必须围绕数据样本构建单元测试时,请使用预期输出数据的第二个样本。 10K行文本或二进制兆字节。不要紧。

无论大小如何,您都可以准备预期的输入样本和输出数据表。将其存储在源代码旁边的文件/脚本中。在测试中包含获取数据样本,处理数据和使用某种通用比较工具或SQL语句将输出比特与比较结果进行比较的步骤以及预期结果。