2009-12-02 102 views
3

我正在学习JUnit。由于我的应用程序包含图形输出,因此我希望能够根据所看到的情况来眼球输出并手动通过或不通过测试。它应该等待我一段时间,然后如果它超时失败。JUnit:暂停用户输入

有没有办法在JUnit(或其扩展)中做到这一点,或者我应该只是在输出上抛出一个对话框和assertTrue?看起来这可能是现有解决方案的常见问题。

编辑:如果我不应该为此使用JUnit,我应该使用什么?我想每隔一段时间手动验证一次构建,并自动进行单元测试,如果这两个测试框架相互配合,那就太好了。

回答

6

手动接受/拒绝测试失败了使用自动测试框架的目的。 JUnit不是为这种东西而设计的。除非你找到了创建和注入表示输出设备的对象模型的方法,否则你应该考虑替代方案(不知道对不对)。

我曾经为视频解码组件写过自动测试。我使用其他解码器作为参考将解码数据转储到文件中,然后将解码器的输出与使用每对图像的PSNR的输出进行比较。这不是100%自包含(需要外部文件作为资源),但至少是自动的,对我来说工作得很好。

+0

我会研究一种自动眼球输出的方法。不理想,可能适用于明显的回归。 – 2009-12-03 17:58:09

+0

我现在有一些类似的问题,我现在可以理解的问题: - 我必须创建水印图像 - 我想创建一个单元测试,但它不是微不足道的检查图像是否真的水印 - 我想使用临时文件夹,并且我想在测试后清理所有文件 因此,在这种情况下,有必要说例如如果测试是使用特殊参数运行的,那么在测试结束之前,测试打印临时文件夹到控制台,并让我检查清理前的结果。然后,如果需要,您可以进行手动检查。 – 2012-10-16 09:00:56

1

单元测试不应该需要人为干预。如果你需要用户采取行动,那么我认为你做错了。

如果您需要一个人来验证事情,那么不要将其作为单元测试的一部分。只要将它作为测试部门在QAing构建时执行的必要步骤即可。 (您的质量保证部门仍然适用您)

3

虽然您可能可以对其进行编码,但这不是JUnit的意图。这是关于自动化测试,而不是手动测试。一般来说,“它看起来是否正确”测试被认为是一个集成测试,因为它是一种非常难以正确自动化的方式,并且不会随时破坏微不足道的变化。

看看Abbot给你一个更强大的方法来测试你的GUI。

+1

或FEST(http://code.google.com/p/fest/)。 – 2009-12-02 17:04:13

+0

这不是我想测试的GUI;它是图形输出。但是,当我*做*到测试GUI时,感谢这些指针! – 2009-12-02 17:22:49

0

如果使用MVC或任何实用方法(即使用Swing,通常使用颜色映射方法),我建议对模型使用单元测试。如果你对模型行为等事情有很好的单元测试,如果你有一个UI错误,它将有助于缩小你的搜索范围。

基于视觉的单元测试非常困难,在我工作的公司他们曾尝试过这些视觉测试,但显卡的细微差异可能会导致测试失败。最后,这是需要一个好的Q/A团队的地方。

0

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

你要做的另一件事是尽可能地将你的gui代码中大部分工作的代码分开。然后,您可以在此工作代码上编写单元测试,而无需处理用户界面。你也会发现你会更频繁地运行这些测试,因为它们可以快速运行。