2013-05-08 51 views
1

我試圖在多個幀上運行測試。 執行時會掛起創建一個新的機器人。FEST測試掛起創建新的機器人

第一幀使用默認的機器人,第二機器人的代碼如下:

Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy(); 

window2 = new FrameFixture(robot2, frame2); 

我不明白爲什麼它不會執行過去的這條線,不會引發任何錯誤,它只是暫停。

回答

2

儘量只使用一個機器人,或者確保開始一個新的機器人,那老機器人做之前 robot.cleanUp()robot.cleanUpWithoutDisposingWindows() 否則 新的機器人將只是等待獲得在屏幕上的鎖,其中第一個機器人擁有 ,所以你的測試程序只會掛起。

0

當在機器人上創建Fest機器人或調用方法時,請確保您在UI線程上是而不是Alex Ruiz explains this caution of Swing-Fest threading in his blog

我發現如果我在JavaFX線程上調用Robot上的方法,它一直只在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; 

確保您安全地調用機器人的方法。

(如果Fest庫可以添加一些狀態或錯誤條件檢查以強制執行A​​lex博客中詳細介紹的線程要求,這不會有幫助。)