FEST Test зависает при создании нового робота

Я пытаюсь запустить тесты на нескольких кадрах. При выполнении зависает на создании нового робота.

В первом кадре используется робот по умолчанию, код второго робота приведен ниже:

Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy();

window2 = new FrameFixture(robot2, frame2); 

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


person John Smith    schedule 08.05.2013    source источник


Ответы (2)


Попробуйте использовать только одного робота или убедитесь, что перед запуском нового робота старый робот выполняет robot.cleanUp() или robot.cleanUpWithoutDisposingWindows(), иначе ваш новый робот будет просто ждать блокировки экрана, которым владеет первый робот, поэтому ваш тест программа просто зависнет.

person Marcin Sanecki    schedule 20.06.2013

При создании робота Fest или вызове методов робота убедитесь, что вы НЕ находитесь в потоке пользовательского интерфейса. Алекс Руиз объясняет это предостережение в отношении многопоточности Swing-Fest в своем блоге.

Я обнаружил, что если я вызывал методы робота в потоке JavaFX, он постоянно зависал только в OS X 10.8.5 Java 7 (60). В Windows 8 Java 7 (60) тонкая, скрытая проблема никак себя не проявляла.

Возможно добавление вызовов Precondition с помощью служебного метода, подобного этому:

public static boolean isUIThread()
{
    return SwingUtilities.isEventDispatchThread() || Platform.isFxApplicationThread();
}

такие как

Preconditions.checkState(!Utilities.get().isUIThread());
Robot robot = new FrameFixture(frame).robot;

гарантирует, что вы безопасно вызываете методы Robot.

(Было бы полезно, если бы библиотека Fest могла добавить некоторые проверки состояний или ошибок, чтобы обеспечить соблюдение требований к многопоточности, подробно описанных в блоге Алекса.)

person javajon    schedule 07.07.2014