【问题标题】:Unit-testing of visual components in JavaJava中可视化组件的单元测试
【发布时间】:2011-10-28 22:40:51
【问题描述】:

假设我们有一些简单的 Java 可视化组件,例如矩形。组件可以改变位置(让它成为 changePosition(int x, int y) 方法)和颜色(changeColor(Color color))。如何为此类组件创建单元测试?

这是非常简单的情况,但我认为这很好地说明了我的问题:我们如何为 Java 中的任何可视组件创建单元测试?

提前致谢

【问题讨论】:

标签: java unit-testing user-interface


【解决方案1】:

我强烈怀疑组件可以改变它的位置改变它的颜色。组件具有属性,渲染引擎使用这些属性将它们显示在屏幕上。

视觉组件是我们在显示器上看到的某种模型

所以当我们在组件上调用changePosition(x,y) 时,我们通常会更改组件实例上的字段值。我们只需要(单元)测试,如果这些字段在我们调用 changePosition(x,y) 之后具有预期值。

【讨论】:

  • 假设我有一个带有 draw(graphics)/getColor()/setColor(color) 的可绘制对象,我想测试绘制调用是否会在我完成 setColor(Color.红色的)。这与检查 getColor().equals(Color.Red) 不同。它需要的不止这些,例如,使用模拟图形调用 draw() 方法的单元测试实际上检测到对象实际上用所需的颜色绘制自身。比测试改变一个对象实际上改变它要困难得多......
  • 所以我们只能测试组件的模型?如果我们尝试测试这个组件的视图,我们应该使用 draw 方法创建复杂的模拟对象,它可以检查组件的实际视图。我说的对吗?
  • @Anders - 如果您想单元测试 paint(Graphics g) 实现,那么您可以传递图像类型 graphics 并验证绘制的图像是否符合预期(如果你真的很想这样做)。
  • @Andreas,这是一种可能性。虽然感觉图像识别有点困难,但我可能会测试 mockGraphics.getThingsDrawn().count() == 1 并且它的颜色是红色等等。 Lampapos:,我们想说的是,很难测试一个东西看起来如何,你可以很容易地问它(认为)它看起来如何,但这只是几乎一样的事情。
【解决方案2】:

我会编写一个测试来创建一个合适的BufferedImage,检索该图像的图形上下文并指示组件(正在测试)到paint()

然后我可以对渲染图像执行一些断言,例如检查特定像素/区域是否具有所需的颜色。

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2023-03-31
    • 2023-03-15
    • 2018-01-01
    相关资源
    最近更新 更多