Тестирование SWT GUI с SWTBot - PullRequest
       35

Тестирование SWT GUI с SWTBot

8 голосов
/ 19 апреля 2011

Я хочу протестировать простое приложение с графическим интерфейсом пользователя SWT с SWTBot . К сожалению, я не знаю, с чего начать. Существует несколько учебных пособий, в которых описывается тестирование подключаемого модуля Eclipse, но я не смог найти что-либо относительно моей проблемы. Я даже не знаю, возможно ли это.

1 Ответ

17 голосов
/ 20 апреля 2011

Ну, это очень возможно. Выполните шаг, указанный ниже.

  1. Скачать SWTBot для тестирования SWT
  2. Поместите его в папку <eclipsehome>/dropins
  3. Перезапустите затмение

Теперь вы можете играть с SWTBot .

Для демонстрации я написал для вас небольшой диалог входа в систему, и он будет выглядеть так: enter image description here

код

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class SampleSWTUI 
{

    public Shell showGUI(final Display display)
    {
        Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(3,true));
        shell.setText("Sample SWT UI");

        new Label(shell, SWT.NONE).setText("User Name: ");
        final Text nameText = new Text(shell, SWT.BORDER);
        nameText.setText ("");
        GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.horizontalSpan = 2;
        nameText.setLayoutData(data);

        new Label(shell, SWT.NONE).setText("Password: ");
        final Text passwordText = new Text(shell, SWT.BORDER|SWT.PASSWORD);
        passwordText.setText ("");
        data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.horizontalSpan = 2;
        passwordText.setLayoutData(data);

        Button loginButton = new Button (shell, SWT.PUSH);
        loginButton.setText ("Login");
        data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.horizontalSpan = 3;
        loginButton.setLayoutData(data);
        loginButton.addSelectionListener(new SelectionAdapter(){
            public void widgetSelected(SelectionEvent e) 
            {
                String user = nameText.getText();
                String password = passwordText.getText();

                System.out.println("\n\n\n");
                if(user.equals("Favonius") && password.equals("abcd123")){
                    System.out.println("Success !!!");
                }else {
                    System.err.println("What the .. !! Anyway it is just a demo !!");
                }                   
            }
        });

        shell.pack();
        shell.open();
        return shell;

    }

    public static void main(String [] args) 
    {
        Display display = new Display();
        Shell shell = new SampleSWTUI().showGUI(display);
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }

        display.dispose();
    }
}

Теперь создайте тестовый пример JUnit (поищите его в Google, если вы новичок в нем). Также добавьте все файлы jar , присутствующие в SWTBot (тот, который вы скачали) в вашем classpath .

Теперь сначала создайте отображение (потому что оно необходимо приложению). Также получите дескриптор контейнера , в котором присутствуют ваши виджеты / элементы управления. В моем случае это Shell .

SWTBot код

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swtbot.swt.finder.SWTBot;
import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotButton;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;
import org.junit.Test;


public class SWTBotDemo 
{
    @Test
    public void test() 
    {
        SWTBotPreferences.PLAYBACK_DELAY = 100; // slow down tests...Otherwise we won't see anything

        Display display = new Display();
        Shell shell = new SampleSWTUI().showGUI(display);
        SWTBot bot = new SWTBot(shell);

        SWTBotButton loginButton = bot.button("Login");
        SWTBotText userText = bot.textWithLabel("User Name: ");
        SWTBotText passwordText = bot.textWithLabel("Password: ");

        userText.setFocus();
        userText.setText("Superman");

        assert(userText.getText().equals("Superman"));

        passwordText.setFocus();
        passwordText.setText("test123");

        assert(userText.getText().equals("test123"));

        loginButton.setFocus();
        loginButton.click();    


        userText.setFocus();
        userText.setText("Favonius");

        assert(userText.getText().equals("Favonius"));

        passwordText.setFocus();
        passwordText.setText("abcd123");

        assert(userText.getText().equals("abcd123"));

        loginButton.setFocus();
        loginButton.click();    

        while (!shell.isDisposed()) {
             if (!display.readAndDispatch()) display.sleep();
        }

        display.dispose();
    }
}

Теперь все методы и переменные SWTBot четко определены в источнике и источник связан внутри jar-файлов SWTBot. Так что вы всегда можете пойти дальше и взломать его исходный код.

Дальнейшее чтение

  1. http://wiki.eclipse.org/SWTBot/FAQ
  2. http://wiki.eclipse.org/SWTBot/UsersGuide

Надеюсь, это поможет.

...