4

有没有关于如何使用 AssertJ 测试单个组件或 JComponent 的示例?

入门指南显示了使用主类测试整个应用程序的奇怪示例,这还不够细化。我期待首先测试自定义组件。

更新

假设我有以下组件:

package tests;

import javax.swing.*;
import java.awt.*;

public class JCustomPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.RED);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
}

我想检查它是否显示为红色。写什么?

package tests;

import org.assertj.swing.edt.FailOnThreadViolationRepaintManager;
import org.assertj.swing.fixture.JPanelFixture;
import org.assertj.swing.testing.AssertJSwingTestCaseTemplate;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class Test01 extends AssertJSwingTestCaseTemplate {

    private JPanelFixture panel;

    @BeforeClass
    public static void setUpOnce() {
        FailOnThreadViolationRepaintManager.install();
    }

    @Before
    public void setUp() {
        panel = new JPanelFixture(robot(), new JCustomPanel());
    }

    @Test
    public void testColorIsRed() {
        //what to write here?
    }
}
4

2 回答 2

2

请注意,有一个邮件列表,您可能会在其中收到针对特定问题的快速答案,因为那里可能只有少数 AssertJ Swing 用户。

有一个示例项目不是很大,但应该成为新用户关于如何使用 AssertJ Swing 的一个很好的参考。

不幸的是,您尝试测试的“应用程序”是一个,AssertJ Swing 的目标不是。因为它似乎只包含颜色,所以您没有太多选择。AssertJ Swing 旨在成为一个功能测试工具,而不是一个精确的像素测试工具。因此,它对进行像素测试并没有很好的支持。

对于颜色,JPanelFixture提供foreground()background()执行以下操作:

panel.background().requireEqualTo(Color.RED);

但正如所说,这不是图书馆的主要目的。

于 2015-07-23T17:08:08.420 回答
-2

我经常使用 assertj-swing,并认为您无法使用它验证自定义绘画。- 来自任何夹具的foreground() 实际上正在调用它的组件。所以他们对你的情况没有帮助。

另一个选项是将一些绘制消息记录到您的自定义绘制组件中并验证这些消息。它可能太丑陋但有效。

于 2017-01-09T04:39:02.227 回答