Не так просто будет захватить выходные данные другого процесса - будет проще всего, если ваше тестовое приложение запустит непосредственно свинг-приложение в той же виртуальной машине Java.
Затем вы можете вызвать paint (Graphics g) на JFrame, передав компоненту закадровую графику (BufferedImage - подробности здесь .) Вы можете отправлять входные события в очередь событий AWT через EventQueue.postEvent (AWTEvent) - это можно использовать для имитации ввода AWT.
Однако изучили ли вы существующие тестовые фреймворки? FEST имеет тестовую среду, специально предназначенную для манипулирования и проверки пользовательского интерфейса. Есть также аббат , более старый, чем кто-то предпочитает. Существуют также тестовые среды, которые концентрируются на функции и состоянии, а не на скриншотах и событиях ввода. Они не лучше / хуже, но дополняют друг друга.
Состояние тестирования пользовательского интерфейса включает SwingUnit и UISpec4J .
Есть много хороших фреймворков, так что может быть полезно провести небольшое исследование, прежде чем строить еще одно!
EDIT:
Чтобы запустить приложение, вместо запуска
java -cp ... a.b.c.AppToTest
Вы запускаете
java -cp ... TestWrapper AppToTest
и внедрите TestWrapper следующим образом
public class TestWrapper {
/* args[0] - class to launch. Remainder of args passed to launched app.*/
public static void main(String[] args) throws Exception
{
Class app = Class.forName(args[0]);
Method main = app.getDeclaredMethod("main", new Class[] { (new String[1]).getClass()});
String[] appArgs = new String[args.length-1];
System.arraycopy(args, 1, appArgs, 0, appArgs.length);
main.invoke(null, appArgs);
// now you have just launched another application inside the same VM
}
}
Как только вы запустили приложение, вы можете подождать, пока оно запустится, и опросить
Window.getOwnerlessWindows
чтобы найти любые окна верхнего уровня, которые создает приложение.
Более прямой подход - установить собственный RepainManager - вы можете просто делегировать существующий. Это вызывается для всех операций рисования окна, так что вы попадаете прямо в сердце иерархии окон,
Вы также можете зарегистрироваться для прослушивания всех событий в AWT EventQueue. Это также даст вам внутреннее представление о том, что происходит в приложении, и из этого вы можете определить, какие окна созданы, в фокусе и т. Д.