JUnit:暂停等待用户输入

3
我正在学习JUnit。由于我的应用程序包含图形输出,所以我希望能够通过观察输出并根据我看到的手动通过或失败测试。它应该等待我一段时间,然后如果超时就失败。
在JUnit(或其扩展)中是否有这样做的方法,或者我应该只是弹出一个对话框并对输出进行assertTrue?这似乎可能是一个常见的问题,有现成的解决方案。
编辑:如果我不应该使用JUnit进行此操作,那我应该使用什么?我想每隔一段时间手动验证构建,自动进行单元测试,如果这两个测试框架能够相互配合,那将是很棒的。
5个回答

6
手动接受/拒绝测试违背了使用自动化测试框架的初衷。JUnit不适用于这种情况。除非您找到一种创建和注入模拟表示输出设备对象的方法,否则应考虑其他替代方案(抱歉,我不知道其他替代方案)。
我曾经为视频解码组件编写过自动化测试。我使用其他解码器将解码数据转储到文件中,并将我的解码器的输出与每对图像的 PSNR进行比较。这并不是完全自包含的(需要外部文件作为资源),但至少是自动化的,并且对我很有效。

我会尝试寻找一种自动检测输出的方法。虽然不是特别理想,但对于明显的回归问题可能还是可行的。 - Alex Feinman
我现在有一个类似的问题,我现在可以理解这个问题:
  • 我需要创建带水印的图像
  • 我想创建一个单元测试,但是检查图像是否真的带有水印并不容易
  • 我想使用temporaryfolder,并且我想在测试后清理所有文件
因此,在这种情况下,如果测试使用特殊参数运行,则在测试结束之前,测试将把临时文件夹打印到控制台,并让我在清理之前检查结果。然后您可以手动检查。
- Gábor Lipták

3
虽然您可能可以编写代码进行测试,但这不是JUnit的目的。它关注的是自动化测试,而不是手动引导测试。通常,“是否看起来正确”的测试被认为是集成测试,因为很难以一种不会因微小更改而经常中断的方式正确自动化。
请查看Abbot,以便为GUI提供更强大的测试方式。

我想测试的不是GUI,而是图形输出。不过,当我开始测试GUI时,感谢您提供的指针! - Alex Feinman

1

单元测试不应需要人工干预。如果您需要用户执行操作,那么我认为您做错了。

如果您需要人类验证事物,请不要将其作为单元测试的一部分。只需将其作为测试部门在QA构建时执行的必需步骤即可。(如果您的QA部门只有您一个人,则仍然适用。)


0

如果使用MVC,或任何实用方法(例如,在Swing中,常见的是颜色映射方法),我建议使用您的单元测试来测试模型。如果您对模型行为等方面有一组良好的单元测试,那么如果您遇到UI错误,它将有助于缩小搜索范围。

基于视觉的单元测试非常困难,在我工作过的一家公司中,他们曾尝试过这些视觉测试,但视频卡中的轻微差异可能会导致测试失败。最终,这就需要一个优秀的Q / A团队。


0

看一下FEST-Swing。它提供了一种简单的方法来自动测试您的GUI。

另一件事是尽可能将负责大部分工作的代码与GUI代码分开。这样,您可以编写单元测试来测试这个工作代码,而不必处理用户界面。您还会发现,您会更频繁地运行这些测试,因为它们可以快速运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接