2011-10-06 4 views
1

나는 프로그램을 작성 했으므로 테스트를 위해 "실행 가능한 테스트 스크립트"를 작성해야한다.테스팅 프로그램 java

실행 가능한 테스트 스크립트는 기본 메소드를 의미합니다.

그러나 버튼을 클릭하거나 OptionPane에서 입력 할 때 프로그램의 모든 메소드 호출이 트리거됩니다. 그럼 마우스 클릭을 제어하기 위해 실행 가능한 테스트 스크립트를 작성하려면 어떻게해야합니까?

문제를 명확하게 설명했는지 여부는 알 수 없습니다. 이 프로그램은 프로젝트 작업 관리 도구이므로 버튼을 클릭하여 새 프로젝트를 만들고, 프로젝트를 저장하고, 작업을 추가하고, 직원을 추가하는 등의 작업을 수행 할 수 있습니다. 문제는 자바 코드로 클릭 할 버튼을 어떻게 제어 할 수 있는가입니다.

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에 대한 참조 (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

, 내가 별도의 것 로직으로부터의 인터페이스. 이 방법으로, 내 버튼은 기본 클래스를 호출하고, 내 디스플레이는 기본 클래스를 호출하며, 내 테스트 스크립트가 기본 클래스를 호출하도록 할 수 있습니다!

스윙이 아니라 다른 유형의 인터페이스처럼 다음을 고려하십시오. 내가 준 예제는 꽤 절름발이입니다. 왜냐하면 모든 것이 증가하기 때문입니다. 그러나 그 아이디어는 어떤 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, 다모는