2011-10-06 61 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, 达摩