Где я могу найти хорошие примеры/руководства по модульным тестам для приложения JavaFX с архитектурой MVC? Да, я гуглил, но примеры простые...
В приложении весенней загрузки, которое я тестирую, мой тестовый класс имеет фиктивные объекты (с использованием @InjectMocks и @Mock).
Код: Выделить всё
@ExtendWith(MockitoExtension.class)
class BurgerControllerTest extends FXTest {
@InjectMocks
BurgerController burgerController;
@Mock
BurgerUtils burgerUtils;
@Mock
ApplicationEventPublisher publisher;
//This is for spring, so I can pick up events published
@Autowired
ApplicationEvents applicationEvents;
@Test
void testSomething(){
burgerController.onBurgerSaveEvent(int x);
assertEquals(1, applicationEvents.stream(LocalFileSaveRequestEvent.class)).count(),"There was a save file event!");
}
Я хочу протестировать метод onBurgerSaveEvent, но он вызывает «ApplicationStartupTask.getPrimaryStage()», который выглядит следующим образом
Код: Выделить всё
public class ApplicationStartupTask extends Task {
ApplicationStartupTask(Stage primaryStage, Application application) {
stage = primaryStage;
this.application = application;
}
}
Код: Выделить всё
class BurgerController{
@Autowired
private burgerUtils;
@Autowired
private ApplicationEventPublisher publisher;
onBurgerSaveEvent(int x){
File file = LocalFileManager.chooseWriteFile(ApplicationStartupTask.getPrimaryStage());
publisher.publishEvent(new LocalFileSaveRequestEvent(this, file, x));
}
}
Код: Выделить всё
class LocalFileManager{
public static File chooseWriteFile(Stage stage) {
//Adds a stage to the existing javafx application
Stage dummy = new Stage();
dummy.initOwner(stage);
FileChooser fileChooser = new FileChooser();
File selected = fileChooser.showSaveDialog(dummy);
.....
}
}
Чтобы запустить все в одном потоке, я предполагаю, что мне нужно расширить ApplicationTest или запустить с ApplicationExtension.class и создать метод start/@Start, который устанавливает сцену и stage.show()
Но если я это сделаю, я не смогу работать с MockitoExtension.class, и он скажет, что все мои макеты имеют значение null.
Подробнее здесь: https://stackoverflow.com/questions/797 ... nd-mockito
Мобильная версия