【问题标题】:JUnit: pause for user inputJUnit:暂停用户输入
【发布时间】:2009-12-02 14:17:31
【问题描述】:

我正在学习 JUnit。由于我的应用程序包含图形输出,因此我希望能够根据我看到的内容来观察输出并手动通过或失败测试。它应该等待我一段时间,然后如果超时则失败。

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

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

【问题讨论】:

    标签: java testing junit


    【解决方案1】:

    手动接受/拒绝测试违背了使用自动化测试框架的目的。 JUnit 不是为这种东西而生的。除非您找到一种方法来创建和注入代表您的输出设备的对象模型,否则您应该考虑替代方案(真的不知道有什么抱歉)。

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

    【讨论】:

    • 我将研究一种自动观察输出的方法。不理想,可能适用于明显的回归。
    • 我现在有一些类似的问题,我现在可以理解这个问题: - 我必须创建带水印的图像 - 我想创建一个单元测试,但是检查图像是否真的很重要水印 - 我想使用临时文件夹,并且我想在测试后清理所有文件所以在这种情况下说,例如,如果测试使用特殊参数运行,那么在测试结束之前, test 将临时文件夹打印到控制台,并让我在清理之前检查结果。然后,您可以根据需要进行手动检查。
    【解决方案2】:

    尽管您可以编写代码,但这不是 JUnit 的意义所在。它是关于自动化测试,而不是引导式手动测试。通常,“它看起来是否正确”测试被视为一种集成测试,因为它很难以一种不会因为微不足道的更改而一直中断的方式正确自动化。

    查看Abbot,为您提供一种更可靠的方式来测试您的 GUI。

    【讨论】:

    • 这不是我要测试的 GUI;它是图形输出。不过,感谢您在我确实开始测试 GUI 时提供的指导!
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      如果使用 MVC 或任何实用程序方法(即使用 Swing,通常有颜色映射方法),我建议对模型使用单元测试。如果您对模型行为等内容进行了良好的单元测试,如果您有 UI 错误,它将有助于缩小搜索范围。

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-23
          • 2014-07-24
          • 2015-06-28
          • 1970-01-01
          • 2019-08-10
          • 1970-01-01
          相关资源
          最近更新 更多