2011-10-06 72 views
1

我寫了一個程序,現在我需要編寫一個「可運行的測試腳本」來測試它。測試程序java

我想可運行測試腳本是指主要方法。

但該程序的所有方法調用是觸發時鼠標從OptionPane單擊按鈕,或輸入。 那麼,我該如何編寫一個可運行的測試腳本來控制鼠標點擊?

我不知道我是否有清楚的說明問題。該程序是一個項目任務管理工具,因此您可以單擊按鈕來創建新項目,保存項目,添加任務,添加工作人員等。問題是我如何控制哪個按鈕被java代碼點擊?

這裏是一個一個按鈕被點擊時調用方法:

public void newProject() { 
    if (currentProject == null || showConfirm(
      "The current progress will not be saved.\nContinue?")) { 

     resetCurrentProject(); 
     //Get the name of the new project 
     String name = JOptionPane.showInputDialog(this, 
       "Please give a name to the project", "New Project", 
       JOptionPane.QUESTION_MESSAGE); 

     if (name != null) { 

      //Initialize the a new project 
      ArrayList<Task> taskList = new ArrayList<Task>(); 
      ArrayList<Staff> staffList = new ArrayList<Staff>(); 

      //Create a new Project instance 
      try { 
       currentProject = new Project(name, staffList, taskList); 
      } catch (Exception e1) { 
       showError(e1.getMessage()); 
      } 

      //Update the project information panel   
      updateProjectInfoPane(); 
     } 
    } 
} 
+0

你不控制鼠標,你到了按鈕的引用,並觸發一些「點擊」的代碼-event。 – Alxandr

+0

如何點擊點擊事件? – xiaofan2406

+0

JOptionPane的輸入怎麼樣? – xiaofan2406

回答

1

簡單的解釋:與其實際控制鼠標,你就會得到你想要模仿的點擊按鈕的引用。之後,你必須將JButton(假設搖擺)的引用,你可以調用它doClick()(http://download.oracle.com/javase/6/docs/api/javax/swing/AbstractButton.html#doClick%28% 29)。

JOptionPane的我不知道,因爲我從來沒有使用過它,不知道它做什麼,但文檔可以在這裏無論找到:http://download.oracle.com/javase/6/docs/api/javax/swing/JOptionPane.html

1

如果我寫這個,我將會分離從邏輯的接口。這樣,我的按鈕只是調用底層類,我的顯示器正在調用底層類,並且我可以讓我的測試腳本也調用底層類!

考慮,如果它是不可以盪鞦韆以下,但一些其他類型的接口。我給出的例子非常蹩腳,因爲它所做的只是增量。但是這個想法是,Incrementer所具有的任何邏輯現在都被封裝在類中。這意味着如果需要可以輕鬆測試,擴展和修改。

// bad 
class GUI { 
    Button b = new ... 
    int i = 0; 
    TextArea t = new ... 

    // bad code 
    actionPerformed(Button b) { 
     if(b == this.b) i++; // on button press increment 
    } 
    // whatever, you get the idea 
    paint(Graphics g) { 
     t.setText(i + ""); 
    } 

} 

// good code 
class GUI { 
    Button b = new ... 
    int i = 0; 
    TextArea t = new ... 

    // bad code 
    actionPerformed(Button b) { 
     if(b == this.b) i.increment(); // on button press increment 
    } 
    // whatever, you get the idea 
    paint(Graphics g) { 
     t.setText(i.toString()); 
    } 

} 

class Incrementer { 
    int value; 
    void increment() { value++; } 
    public String toString() { return Integer.valueOf(value); } 
} 
+0

我知道,原則上和所有原則都很好,但是「如果你正在寫它」,而不是「如果你已經寫了它」。 – Alxandr

+0

@Alxandr我每天都會爲我的9-5做到這一點。我在大學時做過這些工作。對於像這樣的項目,它也是唯一的方法(禁止Selenium或java.awt.Robot)。 – corsiKa

+0

你的好的和壞的代碼沒有區別: -/ – Alxandr

0

單擊按鈕(即GUI)不是您應該測試(廣泛)的事情。把它交給測試人員 - 他們要麼手動測試,要麼自動化(Selenium,QTP)。

我猜你需要寫一些單元測試...?在這種情況下,只需爲每種方法和工作完成一次測試。你不應該測試前端,而只是測試邏輯。例如,通過編寫一個單元測試來測試你的newProject()方法,該單元測試檢查新項目是否被正確初始化。所以,從你的測試方法中,你調用newProject()並斷言是否創建了一個新的項目實例。

一些像樣的教程:http://www.michaelminella.com/testing/unit-testing-with-junit-and-easymock.html

GUI測試 - 你自己(手動點擊)做簡單的檢查,並把它傳遞給測試人員。如果您沒有與任何測試人員一起工作,那麼我恐怕要走的路是:1.任何重大更改後手動進行測試,2.考慮使用Selenium http://seleniumhq.org/或任何其他自動化工具。

HTH, 達摩