我正在努力解决一下如何对单元测试解析文件...假设我有一个25列的文件,可能是20-1000条记录的长度...我如何编写一个单元测试对抗那?该函数将文件作为字符串作为参数,并返回带有文件内容的DataTable ...
我能想到的最好的方法是解析一个4记录文件,只检查左上角和右下角'角'... 2个顶部记录中的前几个字段和2个底部记录的最后几个字段......我无法想象必须为文件中的每个字段手动键入断言语句。只做一个记录和每个字段似乎都很弱,因为它不考虑多个记录文件或意外数据的情况。
当时看起来“足够好”......但是现在我正在开发一个新项目,它基本上解析了来自10个不同来源的各种PDF文件,每个来源有4-6种不同的格式他们的文件,所以约40-60解析例程。我们最终可能会完全自动化25个额外的资源。我们使用第三方工具获取PDF并将其转换为excel。然后我们坐下来分析输出中的模式,编写调用工具API的代码,获取excel文件并解析它 - 剥离出来垃圾,整理不同地方的数据,清理它等等。
我可以通过单元测试这样的东西吗?
答案 0 :(得分:3)
我不确定我是否完全理解这个问题,但这是一个想法。收集一堆代表不同格式和边缘情况的示例文件。运行转换到您的DataTables并第一次手动检查DataTables以确保它们是正确的。然后将DataTable序列化为XML格式,并将它们与测试用例PDF文件一起存储在单元测试套件中。
您的自动单元测试可以执行从PDF到DataTable的转换,并将结果与相应的“已批准”序列化DataTable表示进行比较。
您可以使用此方法随着时间的推移建立一个测试文档库。单元测试中的失败将表明对解析例程的更改已经打破了特定的边缘情况。
虽然有一个'捕获'。我是我的第一个 例子我在谈论.NET 应用。但是,这个新项目 40可能'擦洗 scripts'是用VBA写的.... 输入是一个Excel电子表格和 输出是一个Excel电子表格......如何 我可以序列化吗?也许做一个 整个文件的校验和????
对于第二个示例,如果Excel电子表格不是太复杂,您可以尝试创建像this one这样的单元格比较例程;也许你可以把它包装成一个自定义的Assert.AreExcelWorksheetsEqual()。你是对的,校验和也可以正常工作。
答案 1 :(得分:2)
当您必须围绕数据样本构建单元测试时,请使用预期输出数据的第二个样本。 10K行文本或兆字节二进制。不要紧。
无论大小如何,您都可以准备预期的输入样本和输出数据表。将其存储在源代码旁边的文件/脚本中。包括测试获取数据样本,处理它以及使用一些通用比较工具或SQL语句将输出位与位与预期结果进行比较的步骤。