测试程序java

时间:2011-10-06 04:30:45

标签: java testing

我已经编写了一个程序,现在我需要编写一个“可运行的测试脚本”来测试它。

我认为可运行的测试脚本意味着主要方法。

但是当鼠标单击按钮或从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();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

简单说明:您可以获得对要模拟单击的按钮的引用,而不是实际控制鼠标。在您引用JButton(假设Swing)之后,您可以在其上调用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 :(得分:1)

如果我写这篇文章,我会将界面与逻辑区分开来。这样,我的按钮只是调用底层类,我的显示器调用底层类,我可以让我的测试脚本也调用底层类!

考虑以下情况,好像它不是摆动而是其他类型的界面。我给出的例子相当蹩脚,因为它所做的只是递增。但是这个想法是任何逻辑增量器现在都封装在类中。这意味着必要时可以轻松测试,扩展和修改。

// 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); }
}

答案 2 :(得分:0)

单击按钮(即GUI)不是您应该测试的(广泛)。留给测试人员 - 他们要么手动测试,要么自动测试(Selenium,QTP)。

我猜你需要写一些单元测试......?在这种情况下,只需为每个方法和完成的工作编写测试。你不应该测试前端,而只是测试逻辑。例如,通过编写检查新项目是否已正确初始化的单元测试来测试newProject()方法。因此,从您的测试方法中调用newProject()并断言是否创建了Project的新实例。

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

GUI测试 - 自己进行简单检查(手动点击)并将其传递给测试人员。如果您不与任何测试人员合作,那么我担心的方法是:1。在任何重大更改后继续手动测试,2。考虑使用Selenium http://seleniumhq.org/或任何其他自动化工具。

HTH, 达莫