簡體   English   中英

測試用Java Swing編碼的應用程序GUI:最佳方法?

[英]Test an application GUI coded with Java Swing : best approach?

我必須自動為Java“繪圖”應用程序GUI(如ArgoUML / LaTeXDraw / etc)生成測試。 我需要驗證經過測試的應用程序的行為是否正確。 在給定的示例中,我需要檢查“撤消/重做”按鈕是否工作正常=“撤消”將畫布置於前移狀態,而“重做”又將其置於以前的狀態。

我已經對如何解決這個問題有了一個想法,但是我希望有經驗的人給予反饋:

  • 我應該使用Robot類來模擬GUI上的輸入嗎? 還是有更簡單的方法?
  • 我需要捕獲程序的狀態以供以后分析,以查看程序的狀態是否一致,是否應該對窗口進行屏幕截圖或是否有辦法遍歷所有JFrame的組件並捕獲其屬性(它應該包含畫布)州)?

  • 更重要的是,我不知道如何在界面上找到每個按鈕。 告訴機器人給定的按鈕在窗口中的某個(x,y)位置的最簡單方法是什么? 我應該在按鈕的.jpeg版本中搜索像素嗎? 我是否應該手動在界面上找到每個按鈕(即為每個包含x,y屬性的按鈕創建一個類)?

  • 最后,我從未將機器人綁定到給定程序。 我可以只加載要測試的軟件的.jar文件,並告訴Robot在該窗口上運行嗎? 還是我需要處理原始項目中的所有源文件?

謝謝您的寶貴時間,如果我的問題中的任何部分似乎不夠清楚,請告訴我,我會盡力更清楚地解釋一下。

附言:關於我需要做的工作的任何建議都歡迎:)

我已經完成了您在其他答案的評論中解釋的內容。

Robot可以在過程的各個部分使用,但取決於編寫方式,遵循最佳測試實踐的願望以及總體需求,它可能會很快受到限制。 如果您未編寫代碼或最佳編碼實踐使您無法訪問或直接測試應用程序的各個方面,則需要采取其他方法。

根據我的經驗,我使用反射來測試實際狀態(例如各種組件的文本值),從而在主要入口點建立隧道。 Robot僅對我執行關鍵事件有用。

最終,答案取決於許多因素:

  1. 機器人? -當然,請根據需要使用它。
  2. 在滿足要求的同時做最簡單的事情。 如果可以截屏,請執行此操作(使用Robot )。 如果您需要更多信息,則可以獲取 JFrameJPanel 的組件並保存提供的屬性。
  3. 可以通過調查UI的多種方式來完成此操作。 尋找按鈕和做doClick直接就可以了,移動鼠標Robot ,做一個按下鼠標等。
  4. 實例化一個新的Robot ,它將被鏈接到主設備。 在簡單的場景中,僅需要new Robot().keyPress(KeyEvent.VK_ENTER);

考慮到所有這些,存在着諸如陷阱之類的陷阱。 最好開始模擬/測試,不要觸摸機器的任何外圍設備。 另外,根據某些方法的運行時間,您可能想要Thread.sleep() (我們很遺憾這樣做)或使用連接的線程。

您沒有添加任何代碼,因此我只能猜測:

如果您的代碼遵循MV(V)C模式,則無需通過GUI進行測試。 您可以直接測試處理重做/撤消的控制器方法,並驗證它們是否正確更改了模型並與撤消/重做堆棧進行通信(這是我的世界中模型的一部分...)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM