我正在编写一个类似 Total Commander 的应用程序。我有一个单独的文件列表组件及其模型。模型支持侦听器并发出事件通知,例如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 单元测试
请注意,一般来说,对 UI 内容进行单元测试总是很困难,因为您必须模拟很多不可用的内容。
因此,开发(任何类型)应用程序时的主要目标始终是尝试尽可能地将 UI 内容与主应用程序逻辑分开。这里有很强的依赖性,使单元测试变得非常困难,基本上是一场噩梦。这通常是通过使用像这样的模式来利用的MVC http://blog.js-development.com/2008/03/logical-separation-with-mvc.html一种方法,您主要测试控制器类,而视图类除了构造 UI 并将其操作和事件委托给控制器外什么都不做。这分离了职责并使测试更容易。
此外,您不必测试框架已经提供的东西,例如测试事件是否正确触发。您应该自己测试您编写的逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)