Как выполнить модульное тестирование одного компонента Swing с помощью AssertJ?

Есть ли примеры того, как тестировать один компонент или JComponent с помощью AssertJ?

Руководство по началу работы показывает странный пример тестирования всего приложения с основной класс, который недостаточно гранулирован. Я ожидаю сначала протестировать пользовательские компоненты.

ОБНОВЛЕНИЕ

Предположим, у меня есть следующий компонент:

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

person Suzan Cioc    schedule 28.06.2015    source источник


Ответы (2)


Обратите внимание, что существует список рассылки, в котором вы можете быстро получить ответы на конкретные вопросы. вопросы, так как может быть только несколько пользователей AssertJ Swing.

Существует проект примеров, который не очень большой, но должен стать хорошим справочником для новых пользователей о том, как использовать AssertJ Swing.

К сожалению, «приложение», которое вы пытаетесь протестировать, не предназначено для AssertJ Swing. Поскольку кажется, что он содержит цвет, у вас не так много вариантов. AssertJ Swing предназначен для функционального тестирования, а не для точного тестирования пикселей. Таким образом, у него нет хорошей поддержки для проведения тестов пикселей.

Для цвета JPanelFixture предоставляет foreground() и background() для выполнения чего-то вроде:

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

Но, как уже было сказано, это не основная цель библиотеки.

person Bertram Nudelbach    schedule 23.07.2015

Я часто использую assertj-swing и думаю, что вы не можете проверить с его помощью пользовательское рисование. - передний план () из любого прибора на самом деле вызывает его компонент. Так что в вашем случае они не помогут.

Другой вариант — зарегистрировать некоторые сообщения рисования в ваш пользовательский компонент рисования и проверить сообщения. это может быть слишком уродливо, но работает.

person MartinsL    schedule 09.01.2017