您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > TestNG
使用TestNG-Abbot實現(xiàn)GUI測試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2013/1/5 13:52:28 ] 推薦標(biāo)簽:

了解 GUI

圖 1 顯示了已啟動的 Word Finder GUI。記住該 GUI 之所以簡單只有一個原因:它演示了 TestNG-Abbot 的三個 fixture 類以及一些要引導(dǎo)的測試用例!

圖 1. Word Finder GUI

當(dāng)使用 TestNG-Abbot 進(jìn)行測試時,應(yīng)該首先檢查 GUI 的組件。Word Finder GUI 由圖 2 所示的三個組件組成:

圖 2. Word Finder GUI 的組件

如您所見,Word Finder GUI 由一個 JTextField(用來輸入要查詢的單詞)、一個 JButton(使 GUI 從字典數(shù)據(jù)庫中獲取釋義)和一個 JEditorPane (顯示釋義)組成。

在良好的場景中,如果我輸入 pugnacious 然后單擊 Find Word 按鈕,JEditorPane 將顯示 “Combative in nature; belligerent”,如圖 3 所示:


圖 3. 良好的場景 —— 工作良好!

使用 TestNG-Abbot 進(jìn)行測試

要開始使用 TestNG-Abbot,需要創(chuàng)建一個常規(guī)的測試 fixture,它將使用 TestNG 的 BeforeMethod 和 AfterMethod 注釋為您的 GUI 創(chuàng)建一個實例。TestNG-Abbot 框架附帶了一個方便的 AbbotFixture 對象,它簡化了 GUI 組件的使用,實際上也引導(dǎo)了整個測試過程。要在測試 fixture 中使用該對象,需要在測試前將一個 GUI 實例傳遞給 fixture 對象的 showWindow() 方法,然后使用名為 cleanUp() 的方法對 fixture 進(jìn)行清理。

在清單 1 中,我創(chuàng)建了一個 TestNG 測試(實際上并沒有對其做任何測試),該測試在 fixture 中使用 TestNG-Abbot 的 AbbotFixture 對象來存放 Word Finder GUI 的實例。

清單 1. 使用 AbbotFixture 對象定義 WordFindGUITest

public class WordFindGUITest { private AbbotFixture fixture; @BeforeMethod private void initializeGUI() {  fixture = new AbbotFixture();  fixture.showWindow(new WordFind(), new Dimension(269, 184)); } @AfterMethod public void tearDownGUI() {  fixture.cleanUp(); }} 


由于 Word Finder GUI 的用戶可見的行為會影響 圖 2 所示的三個組件,需要通過編程對其進(jìn)行調(diào)整,以確保工作能正常進(jìn)行。比如,驗證 圖 3 演示的良好的場景,需要執(zhí)行下面三個步驟:

    獲得對 JTextField 的引用并向其添加一些文本。
    獲得 JButton 的句柄并單擊它。
    獲得對 JLabel 組件的引用并檢驗是否顯示了正確的釋義。

檢驗良好的場景

使用 TestNG-Abbot,可以通過這三個方便的 fixture 類型執(zhí)行上面所屬的三個步驟:TextComponentFixture 用于 JTextField;ButtonFixture 用于 Find Word 按鈕;LabelFixture 用來驗證 JLabel 中特定的文本。

清單 2 顯示了用于驗證 圖 3 中演示的內(nèi)容是否可以正常工作的代碼:


清單 2. 測試一個良好場景

@Testpublic void assertDefinitionPresent() { TextComponentFixture text1 = new TextComponentFixture(this.fixture,   "wordValue"); text1.enterText("pugnacious"); ButtonFixture bfix = new ButtonFixture(this.fixture, "findWord"); bfix.click(); LabelFixture fix = new LabelFixture(this.fixture, "definition"); fix.shouldHaveThisText("Combative in nature; belligerent.");} 


注意 fixture 對象通過一個邏輯名稱和特定的 GUI 組件連接在一起。例如,在 Word Finder GUI 中,通過編程將 JButton 對象與 “findWord” 名稱聯(lián)系起來。請注意在定義按鈕時,我是如何通過調(diào)用組件的 setName() 方法做到這點的,如清單 3 所示:


清單 3. 定義 Find Word 按鈕

findWordButton = new JButton();findWordButton.setBounds(new Rectangle(71, 113, 105, 29));findWordButton.setText("Find Word");findWordButton.setName("findWord"); 


同樣要注意,在 清單 2 中,我是如何通過將 “findWord” 名稱傳遞給 TestNG-Abbot 的 ButtonFixture 對象而獲得對按鈕的引用。“單擊” 按鈕(調(diào)用 click 方法)然后使用 TestNG-Abbot 的 LabelFixture 對象插入單詞的釋義,多么酷!不過不要此滿足。

測試意外場景

上一頁123下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd