'GUI 테스트'에 해당되는 글 1건

  1. 2009.06.08 GUI TEST
Framework/예외처리2009. 6. 8. 20:04

흔히 알려진 테스트 하기 어려운 모듈은 네트워크, 데이타 베이스, GUI 인데 특히 Swing으로 제작된 GUI 프로그래밍을 테스트 하는 것은 꽤 어렵다. 

사실 가장 좋은 방법은 그냥 View 모듈을 Model과 Controller에서 최대한 분리하는 방법이 최선이긴 하다. 그걸로 충분하지 않다면 아래와 같인 자동 로봇을 시도해 볼 수 있다.

아래 코드는 특정 시나리오대로 프로그램을 실행하면서 마지막에 해당 GUI 화면을 갭쳐한다.

package com.bleujin.thinlet.sample.robot;

import java.awt.AWTException;
import java.awt.FlowLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class RobotTest {

  public static void main(String[] args) {

    ButtonFrame frame = new ButtonFrame() ;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE;
    frame.setVisible(true;
    
    GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice screen = environment.getDefaultScreenDevice();

    try {
      Robot robot = new Robot(screen);
      run(robot);
    catch (AWTException ex) {
      ex.printStackTrace();
    }
  }

  private static void run(Robot robot) {
    robot.keyPress(' ');
    robot.keyRelease(' ');

    robot.delay(2000);
    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyRelease(KeyEvent.VK_TAB);
    robot.keyPress(' ');
    robot.keyRelease(' ');

    robot.delay(2000);
    robot.mouseMove(20050);
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK);

    robot.delay(2000);
    BufferedImage image = robot.createScreenCapture(new Rectangle(00450350));

    ImageFrame frame = new ImageFrame(image);
    frame.setVisible(true);

  }
}

class ButtonFrame extends JFrame {
  private JButton plainJButton; 

  public ButtonFrame() {
    super("Testing Buttons");
    setSize(450350;
    setLayout(new FlowLayout())// set frame layout

    plainJButton = new JButton("Plain Button")
    add(plainJButton)

    ButtonHandler handler = new ButtonHandler();
    plainJButton.addActionListener(handler);
  

  private class ButtonHandler implements ActionListener {
    public void actionPerformed(ActionEvent event) {
      JOptionPane.showMessageDialog(ButtonFrame.this, String.format("You pressed: %s", event.getActionCommand()));
    
  
  
  
}

class ImageFrame extends JFrame {
  public ImageFrame(Image image) {
    setTitle("Capture");
    setSize(450350);
    JLabel label = new JLabel(new ImageIcon(image));
    add(label);
  }

}

'Framework > 예외처리' 카테고리의 다른 글

GUI TEST  (0) 2009.06.08
예외 수집기  (0) 2009.03.26
exception framework  (0) 2009.03.10
checked vs runtime  (0) 2009.03.07
checked exception의 문제  (0) 2009.02.09
예외 처리 격언  (2) 2009.02.09
Posted by bleujin

댓글을 달아 주세요