Piszę aplikację podobną do TotalCommander. Mam osobny komponent dla listy plików i jego model. słuchacze wsparcia modelowe i problemy powiadomienie o zdarzeniach takich jak CurrentDirChanged
itp w następujący sposób:Jednostka testująca komponent Swing
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); } }); } }
Napisałem prosty test na to:
@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); }
To nie działa, ponieważ nie ma to EventDispatchThread
. Czy istnieje jakiś sposób, aby przetestować to urządzenie wewnątrz bezgłowej konstrukcji?
jednostka testowanie Java Swing JMock
Napisałem tę aplikację i chcę przetestować, czy uruchamia ona zdarzenia, kiedy powinna i przy prawidłowych parametrach.Myślę, że to, co robię tutaj źle, to zapewnienie wątku GUI w modelu. Model nie jest składnikiem Swing, nie musi wywoływać zdarzeń wewnątrz wątku GUI. Czy właściwie tu myślę? –