Pdf TDD和报告的最佳实践

Pdf TDD和报告的最佳实践,pdf,tdd,reporting,Pdf,Tdd,Reporting,我正试图更加熟悉测试驱动的方法。我的一个缺点是代码的主要部分是生成报告上下文(PDF文档、图表图像)。总是有一个复杂的设计师参与,没有简单的正确性测试。没有机会测试碎片 您知道这种情况下的TDD实践吗?您可以尝试将web服务用于报告数据源并进行测试,但您不会对渲染进行单元测试。这与测试视图时遇到的问题完全相同。当然,您可以使用像Selenium这样的web测试框架,但您可能不会练习真正的TDD。代码完成后,您将创建测试 简而言之,使用常识。尝试测试报表的呈现可能没有意义。您可以使用手动测试用例,

我正试图更加熟悉测试驱动的方法。我的一个缺点是代码的主要部分是生成报告上下文(PDF文档、图表图像)。总是有一个复杂的设计师参与,没有简单的正确性测试。没有机会测试碎片


您知道这种情况下的TDD实践吗?

您可以尝试将web服务用于报告数据源并进行测试,但您不会对渲染进行单元测试。这与测试视图时遇到的问题完全相同。当然,您可以使用像Selenium这样的web测试框架,但您可能不会练习真正的TDD。代码完成后,您将创建测试

简而言之,使用常识。尝试测试报表的呈现可能没有意义。您可以使用手动测试用例,测试人员必须手动完成,或者自己检查报告


您可能还想查看“

在这种情况下,我问自己的问题是“我如何知道我做对了”

在我的职业生涯中,我写了很多代码,但几乎所有的代码在第一次都不起作用。几乎每次我回去为重构、功能更改、性能或bug修复更改代码时,我都会再次破坏它。TDD保护我不受自己的伤害(谢天谢地!)

对于生成的代码,我不觉得有必要测试代码。也就是说,我信任代码生成器。但是,我确实想测试代码生成器的输入。具体如何做到这一点取决于具体情况,但一般的做法是问问自己,我可能是怎么弄错的,然后找出如何验证我是正确的


也许我会写一个自动测试。也许我会手动检查一些东西,但那是相当危险的。也许是别的。这取决于具体情况。

有些应用程序或框架只是继承了单元测试的不友好特性,对此你真的无能为力


我倾向于完全避免使用此类框架,但如果绝对被迫处理此类问题,则将所有逻辑提取到可测试的库中,只在框架中留下声明性代码可能会有所帮助。

要对Mark Seemann和Jay Bazuzi的答案提出稍微不同的看法:

您的问题是,报告前端生成的数据格式无法在测试的“验证”部分轻松检查其输出

处理这类问题的方法是:

  • 进行一些非常高级的集成测试,从表面上验证后端代码是否正确地挂接到前端代码中。我通常称这些测试为“冒烟测试”,比如“如果我打开电源,它冒烟,那就糟糕了”

  • 找到一种不同的方法来测试后端报告代码。要么测试一个中间输出数据结构,要么实现一个更易于测试的替代输出前端,比如HTML、纯文本等等


  • 这与测试web应用程序的常见问题类似:不可能自动测试“页面看起来正确”。但测试页面数据中的单词和数字是否正确就足够了(使用编程浏览器surch,如mechanize和刮页器),并进行一些表面功能测试(使用Selenium或Windmill)如果页面严重依赖于Javascript。

    您可以使用验收测试驱动的开发来取代单元测试,并将已知数据的验证报告用作参考


    然而,这种类型的测试并不像单元测试那样提供细粒度的诊断,它们通常只提供通过/失败的结果,并且,如果报告经常更改,也需要重新生成和验证引用

    考虑从PDF中提取文本并进行检查。但是,这不会为您提供格式设置。如果图表在pdf中,一些pdf提取程序可以提取图像。

    面对这种情况,我尝试了两种方法

  • 黄金大师的做法。生成一次报告,自己检查,然后保存为“金师傅”。编写一个自动测试,将其输出与golden master进行比较,如果它们不同,则会失败

  • 自动测试数据,但手动检查格式。我自动检查生成报告数据的模块,但要检查报告格式,我会生成一个带有硬编码值的报告,并手动检查报告


  • 我强烈建议您不要仅仅为了检查报告中数据的正确性而生成完整的报告。当您想要检查报告(而不是数据)时,则生成报告;当您想要检查数据(而不是格式)时,只需生成数据。

    我的第一个想法是将“冒烟测试”与针对具有参考结果的数据库的第二次测试运行相结合。阶段1:参考数据库中没有条目:初始测试;存储结果(手动)验证阶段2:根据参考数据库重新测试。这是相当可观的。但我认为以这种方式解构和验证PDF的代码与原始报告生成具有相同的复杂性。谁来测试测试例程?