我正在学习JUnit。由于我的应用程序包含图形输出,我希望能够根据我所看到的情况来观察输出并手动通过或不通过测试。它应该等我一段时间,如果超时就会失败。
有没有办法在JUnit(或其扩展)中执行此操作,还是应该在输出中抛出一个对话框和assertTrue?看起来它可能是现有解决方案的常见问题。
编辑:如果我不应该使用JUnit,我应该使用什么?我想经常手动验证构建,并自动进行单元测试,如果两个测试框架相处得很好。
答案 0 :(得分:6)
手动接受/拒绝测试会破坏使用自动化测试框架的目的。 JUnit不是为这种东西而制作的。除非你找到一种方法来创建和注入代表你的输出设备的对象的模型,你应该考虑替代方案(不要真的知道任何抱歉)。
我曾经为视频解码组件编写过自动化测试。我使用其他解码器作为参考将解码后的数据转储到文件中,然后将解码器的输出与使用每对图像的PSNR的输出进行比较。这不是100%自包含(需要外部文件作为资源),但至少是自动化的,并且对我来说很好。
答案 1 :(得分:3)
虽然你可以编写代码,但这不是JUnit的意思。它是关于自动化测试,而不是指导手动测试。一般来说,“它看起来是否正确”测试被视为一个集成测试,因为它很难以一种不会随时破坏微小变化的方式正确自动化。
看一下Abbot,为您提供一种更健壮的方式来测试您的GUI。
答案 2 :(得分:1)
单元测试不应该需要人为干预。如果您需要用户采取行动,那么我认为您做错了。
如果您需要人来验证事物,那么请不要将其作为单元测试的一部分。只需让测试部门在QA'ing构建时执行所需的步骤。 (这仍然适用于你的QA部门只是你。)
答案 3 :(得分:0)
如果使用MVC或任何实用方法(例如使用Swing,通常使用颜色映射方法),我建议使用模型的单元测试。如果您对模型行为等事情进行了一系列良好的单元测试,那么如果您遇到UI错误,它将有助于缩小搜索范围。
基于视觉的单元测试非常困难,在我工作的公司,他们尝试过这些视觉测试,但视频卡的细微差别可能会导致测试失败。最后,这是一个需要良好的Q / A团队的地方。
答案 4 :(得分:0)
看看FEST-Swing。它提供了一种自动测试GUI的简便方法。
您要做的另一件事是尽可能地将您的大部分工作代码与gui代码分开。然后,您可以在此工作代码上编写单元测试,而无需处理用户界面。您还会发现,您可以更频繁地运行这些测试,因为它们可以快速运行。