我试图更熟悉测试驱动的方法。我的一个缺点是我的代码的主要部分是生成报告的上下文(PDF文档,图表图像)。总是有一个复杂的设计师参与,没有简单的正确性测试。没机会测试片段!
你知道这种情况的TDD做法吗?
答案 0 :(得分:5)
某些应用程序或框架只是对单元测试不友好,并且你可以做的事情真的不多。
我更喜欢完全避免这样的框架,但如果绝对不得不处理这些问题,将所有逻辑提取到可测试的库中会有所帮助,只留下框架中的声明性代码。
答案 1 :(得分:4)
我在这些情况下问自己的问题是“我怎么知道我做对了”?
我的职业生涯中写了很多代码,而且几乎所有代码都没有在第一次运行。几乎每次我回去并更改代码以进行重构,功能更改,性能或错误修复,我都会再次破坏它。 TDD保护我自己(谢天谢地!)。
在生成代码的情况下,我不觉得有必要测试代码。也就是说,我相信代码生成器。但是,我确实想测试我的输入到代码生成器。具体如何做到这一点取决于具体情况,但一般的方法是问自己我怎么会弄错,然后弄清楚如何验证我做对了。
也许我写了一个自动化测试。也许我会手动检查一下,但这样做很危险。也许别的东西。这取决于具体情况。
答案 2 :(得分:3)
您可以尝试将Web服务用于报告数据源并对其进行测试,但您不会对渲染进行单元测试。这与测试视图时遇到的问题完全相同。当然,你可以使用像Selenium这样的网络测试框架,但你可能不会练习真正的TDD。您将在代码完成后创建测试。
简而言之,使用常识。尝试测试报告的呈现可能没有意义。您可以拥有测试人员必须手动完成的手动测试用例,或者自己检查报告。
您可能还想查看“How Much Unit Test Coverage Do You Need? - The Testivus Answer”
答案 3 :(得分:3)
对Mark Seemann和Jay Bazuzi的回答略有不同:
您的问题是报告前端会生成一种数据格式,您的输出无法在测试的“验证”部分轻松检查。
解决这类问题的方法是:
进行一些非常高级的集成测试,从表面上验证您的后端代码是否正确地连接到您的前端代码中。我通常将这些测试称为“烟雾测试”,如“如果我打开电源并且它抽烟,则很糟糕”。
查找测试后端报告代码的其他方法。测试中间输出数据结构,或者实现更加测试友好的替代输出前端,HTML,明文等等。
这类似于测试网络应用程序的常见问题:无法自动测试“页面看起来正确”。但足以测试页面数据中的单词和数字是否正确(使用程序化浏览器作为机械化和页面刮板),并且如果页面严重依赖,则进行一些表面功能测试(使用Selenium或Windmill)在Javascript上。
答案 4 :(得分:2)
您可以使用验收测试驱动开发来替换单元测试,并为已知的用作参考的数据提供经过验证的报告。
然而,这种测试不能像单元测试那样提供细粒度的诊断,它们通常只提供通过/失败结果,并且,如果报告经常更改,则需要重新生成引用并重新验证为好。
答案 5 :(得分:2)
考虑从PDF中提取文本并进行检查。但是,这不会给你格式化。如果图表在pdf中,某些pdf提取程序可以提取图像。
答案 6 :(得分:2)
面对这种情况,我尝试了两种方法。
黄金大师的方法。生成报告一次,自己检查,然后将其保存为“黄金大师”。编写一个自动化测试,将其输出与黄金大师进行比较,并在它们不同时失败。
自动化数据测试,但手动检查格式。我自动检查生成报告数据的模块,但要检查报告格式,我生成一个包含硬编码值的报告并手动检查报告。
我强烈建议您不生成完整报告,以检查报告中数据的正确性。如果要检查报告(而不是数据),则生成报告;当你想检查数据(不是格式)时,只生成数据。