单元测试Swing组件

Ula*_*kar 9 java swing unit-testing jmock

我正在编写类似TotalCommander的应用程序.我有一个单独的文件列表组件,以及它的模型.模型支持侦听器并CurrentDirChanged以下列方式发出诸如此类事件的通知:

private void fireCurrentDirectoryChanged(final IFile dir) {
    if (SwingUtilities.isEventDispatchThread())
        for (FileTableEventsListener listener : tableListeners)
            listener.currentDirectoryChanged(dir);
    else {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                for (FileTableEventsListener listener : tableListeners)
                    listener.currentDirectoryChanged(dir);
            }
        });
    }
}

我为此写了一个简单的测试:

@Test
public void testEvents() throws IOException {
    IFile testDir = mockDirectoryStructure();
    final FileSystemEventsListener listener = 
                context.mock(FileSystemEventsListener.class);
    context.checking(new Expectations() {{
        oneOf(listener).currentDirectoryChanged(with(any(IFile.class)));
    }});

    FileTableModel model = new FileTableModel(testDir);
    model.switchToInnerDirectory(1);
}

这不起作用,因为没有EventDispatchThread.有没有办法在无头构建中进行单元测试?

单元测试java swing jmock

小智 12

这个:

FEST是一系列库,在Apache 2.0许可下发布,其任务是简化软件测试.它由各种模块组成,可与TestNGJUnit一起使用......


Jur*_*uri 11

注意,一般来说,对UI内容进行单元测试总是很困难,因为你必须嘲笑很多不可用的东西.
因此,开发应用程序(任何类型)时的主要目的始终是尝试尽可能地将UI内容与主应用程序逻辑分开.在这里拥有强大的依赖性,使单元测试变得非常困难,基本上是一场噩梦.这通常通过使用类似MVC类型的方法来实现,在这种方法中,您主要测试控制器类,而视图类除了构建UI并将其操作和事件委派给控制器之外什么都不做.这分离了责任并使测试更容易.

此外,您不一定要测试框架提供的内容,例如测试事件是否被正确触发.你应该自己测试你正在编写的逻辑.