Как лучше всего тестировать код GWT [закрыто]
-
03-07-2019 - |
Вопрос
Как лучше всего тестировать код GWT?
GWTTestCase в размещенном режиме работает слишком медленно, и ни одна из насмешливых платформ не работает.
В настоящее время мы следуем за MVC, как указано в http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/ и с помощью GWTMockUtilities disarm () и restore () для имитации виджетов , И мы не нашли способ протестировать View в GWT MVC. Есть ли лучший способ проверить код GWT?
Решение
Если вы хотите тестировать GWT-виджеты изолированно, вариантов не так много. Вы можете использовать GWTTestCase для создания экземпляров ваших виджетов и тестирования его через API, что и делает Google для самих виджетов GWT: Источник для RadioButtonTest
Однако механизм генерации событий не работает в GWTTestCases, что означает, что вы не можете делать такие вещи, как программно нажимать кнопку и ожидать, что какой-нибудь метод обратного вызова onClick () будет вызван на слушателе. Также трудно, если не невозможно, получить доступ к базовому DOM, поэтому он не может быть лучшим инструментом для тестирования низкоуровневого кода, генерирующего HTML.
Похоже, вы выполняете все правильные шаги; Статья Роба дает отличное описание того, как писать тестируемый код, используя шаблон проектирования Model-View-Presenter (MVP). Чем больше логики вы держите вне слоя представления, тем лучше. Когда это невозможно, используйте такой инструмент, как Selenium, для создания целенаправленных тестов поведения динамического интерфейса.
Я придерживался аналогичной стратегии - MVP с минимальным кодом в виджетах. В некоторых случаях я написал код, который обернул бы класс Grid, поэтому я смог создать экземпляр своего компонента в GWTTestCase, передать ему Grid, вызвать некоторые методы для моего компонента и проверить состояние Grid. Я написал для Better Software статью о Test-First GWT, которую вы можете прочитать в моем блоге . Р>
Если вы хотите протестировать код, который использует не-UI GWT-классы (такие как URL-кодирование или словари), вам нужно будет использовать GWTTestCase или следовать аналогичным стратегиям обертывания, пока код не станет слишком простым для взлома. Затем используйте интеграционный тест с таким инструментом, как Selenium, или несколько целевых GWTTestCases, которые проверяют только то, что вы используете библиотеку правильно - как говорит Дж. Б. Рейнсбергер: «Не тестируйте фреймворк!»
Другие советы
В качестве предупреждения вы должны попробовать gwt-test-utils , которые управляют выполнением клиентского кода GWT в автономной JVM и предоставляют некоторые возможности для макетирования всего, что вы хотите (компонент, службы RPC и т. д.)
Что сработало для меня:
Используйте классическую модель / представление / контроллер (например, нет бизнес-логики в представлении или контроллере; контроллеры преобразуют только события представления в вызовы методов в модели).
Отделите код модели и контроллера от виджетов представления GWT и любых других классов, которые основаны на GWT и не могут быть созданы в простой старой JVM. Затем вы можете проверить их с помощью старого доброго JUnit.
Напишите сквозные тесты для тестирования системы через графический интерфейс, чтобы убедиться, что модели и контроллеры правильно подключены к представлениям. Мы обнаружили, что быстрее развернуть и запустить приложение, а затем взаимодействовать с ним через браузер, управляемый из JUnit с WebDriver, чем использовать GWTTestCase!
Используйте JMock для проверки асинхронных вызовов, например: http://www.jmock.org/gwt. HTML .
Также ознакомьтесь с методиками тестирования с использованием Google Web Toolkit р>