如何使用AssertJ对单个Swing组件进行单元测试?

时间:2015-06-28 13:41:39

标签: java swing unit-testing assertj

是否有关于如何使用AssertJ测试单个Component或JComponent的示例?

Getting started guide显示了使用主类测试整个应用程序的奇怪示例,该类没有足够的粒度。我希望首先测试自定义组件。

更新

假设我有以下组件:

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?
    }
}

2 个答案:

答案 0 :(得分:2)

请注意,mailing list您可能会收到针对该特定问题的快速答案,因为那里可能只有少数AssertJ Swing用户。

examples project不是很大,但应该成为新用户关于如何使用AssertJ Swing的良好参考。

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

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

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

但据说这不是图书馆的主要目的。

答案 1 :(得分:-2)

我正在使用assertj-swing,并且认为你不能用它来验证自定义绘画。   - 来自任何灯具的前景()实际上正在调用其组件。所以他们对你的案子没有帮助。

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