Существует два способа: изображение и рендеринг.
Способ изображения: вы должны найти способ визуализации изображения во внутренний пиксельный буфер (чтобы вы могли запускать свои тесты «без головы», т. Е. Без фактического всплывающего интерфейса).
Затем выберите несколько пикселей и убедитесь, что их цвета правильные. В вашем примере выделите пару белых пикселей вокруг текста, чтобы убедиться, что рендеринг не протекает. Вспомогательные методы, такие как assertThatRectangleIs(area, color)
, помогут покрыть некоторую землю. Идея состоит в том, чтобы выбрать определенные области (например, левую вертикальную полосу Н) и не быть слишком требовательным.
Способ, основанный на рендеринге, работает при условии, что ваша библиотека gfx работает. Итак, что вы делаете, вы высмеиваете реальный код рендеринга примерно так:
public class MockGC extends GC {
List<Op> ops = new ArrayList<Op> ();
void drawLine (int x1, int y1, int x2, int y2) {
ops.add(new Line(x1, y1, x2, y2, copyGC (gc)));
}
}
, поэтому вы просто сохраняете команду и все соответствующие параметры в структуре данных, которую легко сравнивать. Или даже:
public class MockGC extends GC {
StringBuilder buffer = new StringBuilder ();
void drawLine (int x1, int y1, int x2, int y2) {
buffer.append("line "+x1+","+y1+" - "+x2+","+y2+", color="+foreground()+"\n");
}
}
Позже вы можете просто проверить, что были введены правильные команды рендеринга и что использовался GC (цвета, шрифт, подсказки рендеринга).
Последний способ намного быстрее и точнее на 100%, но требует гораздо больше работы для кодирования.