Java - 没有工作台的SWTBot测试向导

时间:2013-01-11 12:19:43

标签: java testing wizard swtbot

我创建了一个eclipse向导,我想用SWTBot测试它。我已经使用了最终可以工作的SWTWorkbenchBot,但我现在想要在没有eclipse工作台的情况下测试向导。这就是为什么我在我的测试类中创建一个shell,我想把它放在我的向导页面上,但我只能看到,是没有我的wizardPage的空壳。

所以我创建了一个新的shell类,其中包含以下代码:

public static void main(String args[]) {
    try {
        Display display = Display.getDefault();
        HorrorShell shell = new HorrorShell(display);
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Create the shell.
 * 
 * @param display
 */
public HorrorShell(Display display) {
    super(display, SWT.SHELL_TRIM);
    setLayout(new FillLayout());

    createContents();
}

/**
 * Create contents of the shell.
 */
protected void createContents() {
    setText("SWT Application");
    setSize(450, 300);
    ManualSettingsWizardPage page = new ManualSettingsWizardPage();
    page.createControl(this);
}

使用它运行的shell类,我的向导页面显示但是如果我尝试将我的测试类作为SWTBotTest或JUnitTest运行它不会向我显示除空壳之外的任何内容。 这是我的测试类中的代码:

private ManualSettingsWizardPage wizard;
private SWTBotShell botShell;
private Shell shell;
private Display display;
    private SWTBot bot;

@Before
public void setUp() {

    botShell = new SWTBotShell(shell);
    bot = new SWTBot();
    wizard = new ManualSettingsWizardPage();

    display = Display.getDefault();
    shell = new Shell(display);
    shell.open();
    shell.layout();

}

@Test
public void bot() throws Exception {
    bot = botShell.bot();
    shell.setBounds(200, 200, 400, 400);
    shell.setLayout(new FillLayout());

    wizard.createControl(shell);
}

1 个答案:

答案 0 :(得分:0)

我认为您的问题源于您正在从SWTBot-Thread创建GUI组件。不过,它们应该由UIThread创建。

通常情况下,您会测试一些插件,该插件会在选择操作时打开向导,例如: “新xyz”。第一步是将您的向导代码放入插件中并注册一个可以启动向导的新操作。然后你可以尝试使用SWTBot找到shell并执行所需的操作。