3

我正在 OS X 上开发基于 SWT 的应用程序,我想在一些需要 SWT 事件循环但不一定存在的实用程序代码上编写一些 JUnit 测试用例(不是自动化 GUI 测试)图形用户界面。我遇到了很多问题。

作为一些故障代码的精简示例:我有一个基于以下模式的小型重复 SWT 计时器实用程序:

public class RepeatingSWTTimer
{
    private boolean isRunning = false;
    private RepeatingSWTTimerAction timerAction;
    private int delay;

    private Runnable timerRunnable = new Runnable()
    {
        @Override
        public void run()
        {
            timerAction.fire();
            if(isRunning)
            {
                Display.getCurrent().timerExec(delay, this);
            }
        }
    };

    public void start()
    {
        isRunning = true;
        Display.getCurrent().timerExec(delay, timerRunnable);
    }
}

代码工作得很好,实际的类不仅仅是一种方法,而且我在我的应用程序的很多地方都使用它而没有问题。但我仍然想用一个测试用例来覆盖它。

我遇到的主要问题是:

  1. 如果没有 Display 实例化(例如在调用Display.getDefault()in 中@BeforeClass),那么Display.getCurrent()将返回一个 Null 指针。

  2. 如果有一个 Display 实例化但没有样板循环代码(while(!shell.isDisposed())...等),那么事件循环似乎不会被底层的本机系统抽出。

  3. 如果我在 中打开一个简单的 shell @BeforeClass,它会阻止 JUnit 测试用例。在我关闭 shell 之前它们不会运行,这让我回到了原来的问题。我假设这是由于-XstartOnFirstThreadOS X 的要求。

我知道有类似使用 SWTSWTBot进行自动化GUI测试的工具,但我只需要一些简单的 JUnit 案例来涵盖我的非 GUI 实用程序代码。

有没有人经历过这样的事情?

4

0 回答 0