тестирование переопределенного компонента краски Junit - PullRequest
1 голос
/ 24 января 2012

У меня проблемы с тестированием переопределенных компонентов рисования.

Я удалил много кода, чтобы упростить вещи

 @Override
    protected void paintComponent(Graphics g) {
                g.setColor(Color.RED);
                int y = //some come;
                int height = //some code
                //for loop
                g.clearRect(1, y, getWidth(), height);
                g.drawRect(1, y, getWidth(), height);
            }
        }
        super.paintComponent(g);
    }

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

Я пытался использовать метод TextAreas 'getComponents(), но он возвращает ноль.Я думал, что вызов repaint () вызовет выполнение компонента рисования.

Спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Есть два решения, о которых я могу подумать:

Вызовите метод paint вашего компонента с помощью Graphics из BufferedImage.Итак,

BufferedImage bi = new BufferedImage(width,height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bi.createGraphics();
yourComponent.setSize(width,height);
yourComponent.paint(g2);
g2.dispose();

Проанализируйте содержимое bi.

Вариант 2, вы можете заставить свой компонент отображать то, что он нарисовал.Когда ваши прямоугольники нарисованы, запишите, что вы делаете.Затем сделайте это доступным из объекта.Это может быть более полезно, если вам нужны конкретные размеры.

private StringBuilder sb = new StringBuilder();
public String getOperations() {
    return sb.toString();
}
@Override
protected void paintComponent(Graphics g) {
    sb.setSize(0);
    g.setColor(Color.RED);
    sb.append("Color(red),");
    int y = //some come;
    int height = //some code
    //for loop
    g.clearRect(1, y, getWidth(), height);
    sb.append("Clear(").append(getWidth()),append(",")
       .append(height).append("),");
    g.drawRect(1, y, getWidth(), height);
    sb.append("drawRect(").append(1),append(","),append(y).append(",")
       .append(getWidth()),append(","),append(height).append("),");
    g.dispose();
    super.paintComponent(g);
}
0 голосов
/ 24 января 2012

Он говорит, что нет никаких компонентов, хотя я делаю g.drawRect (1, y, getWidth (), height);

Вы не добавляете компоненты на панель, поэтому нет доступных для получения компонентов. Метод drawRect (...) рисует только контур прямоугольника, но не создает компонент.

Если вы хотите отслеживать «прямоугольные фигуры», которые вы рисуете, используйте ArrayList для хранения информации о фигурах. См. Пример DrawOnComponent из Пользовательские подходы к рисованию , где приведен пример использования ArrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...