Scout Eclipse ScoutServerTestRunner на клиентских тестах

теперь я запускаю новые проблемы со скаутским тестированием.

У меня есть проект фрагмента клиента для тестирования, и я хотел бы протестировать некоторые созданные мной шаблоны.

Моя проблема в том, что эти шаблоны содержат несколько SmartField, и я хотел бы их протестировать. Для этого мне, вероятно, понадобится ScoutServerTestRunner, чтобы сервер работал.

Но если я попытаюсь добавить его, я получаю сообщение об ошибке:

@RunWith(ScoutServerTestRunner.class)
@ServerTest()

Я получаю сообщение об ошибке:

ServerTest cannot be resolved to a type

, все мои импорты assert удаляются, и я получаю сообщение об ошибке в строке package, предлагая мне Configure build path.

Я предполагаю, что это невозможно сделать, потому что это клиентский фрагмент, и он не может подключиться к серверу. Но как тогда тестировать SmartFields?


person Marko Zadravec    schedule 10.03.2015    source источник
comment
Если я запускаю только ScoutClientTestRunner, я получаю: serverURL имеет значение null. Проверьте расширение proxyHandler. Пример значения: localhost:8080/myapp/process.   -  person Marko Zadravec    schedule 10.03.2015


Ответы (1)


Из вашего вопроса я предполагаю, что есть некоторое недопонимание...


ScoutServerTestRunner и @ServerTest чем-то похожи на ClientServerTestRunner и @ClientTest, но для сервера. Он понадобится вам для тестов, тестирующих сервер.

Классы находятся в комплекте org.eclipse.scout.rt.testing.server.


Если в клиентском тесте вам нужен сервер, у вас есть две возможности:

А/ Запустить сервер

Вы можете запустить сервер

Scout тестирует сервер

Вероятно, это будет не обычный сервер (тот, что в продакшене), потому что вы хотите контролировать базу данных или некоторые внешние службы. Аутентификация также может немного отличаться (чтобы контролировать ее и иметь что-то совместимое с вашими тестами).

Для интеграции в вашу сборку maven можно использовать подключаемый модуль maven-cargo для запуска вашего сервера перед выполнением набора клиентских тестов.

B/ Моделирование серверных служб

Каждый вызов службы, который создает ProxyService, вызывающий сервер, может быть заменен фиктивным (только для клиента).

Scout-тесты с имитацией серверных служб]

Это предпочтительный способ модульного тестирования, поскольку вы не полагаетесь на развернутый сервер. Вы также можете определить для каждого теста, каким будет ответ сервера. Это решение требует, вероятно, изначально больше работы, но, на мой взгляд, оно того стоит.

Для регистрации альтернативной службы вы можете использовать:

TestingUtility.registerServices(
     <activator instance>, 
     <priority>, 
     <service instances>
);

Выигрывает сервис с более высоким приоритетом.

В каждом тесте не забывайте отменять регистрацию альтернативных сервисов, которые вы зарегистрировали.


SmartFields используют CodeTypes или LookupCalls. В случае LookupCall LookupCall, вероятно, вызывает сервер через LookupService. В случае CodeType SmartField внутренне использует класс CodeLookupCall, полагаясь на ICodeService.

В обоих случаях, если вы хотите запустить тест без сервера, вам необходимо убедиться, что клиент использует альтернативные реализации необходимых служб, которым требуется сервер.

person Jmini    schedule 11.03.2015
comment
Спасибо за ваш ответ. Для варианта (1) я предполагаю, что этого недостаточно, если я просто нормально запускаю scout server (scout-server.dev.product -> run). Может быть, вы можете предоставить некоторые подробности, как это сделать? - person Marko Zadravec; 11.03.2015
comment
Ну, вам также нужно настроить, где находится ваш сервер. Я предполагаю, что у вашего ClientSession есть линия, чтобы сделать это: setServiceTunnel(new ClientHttpServiceTunnel(this, UriUtility.toUrl(getBundle().getBundleContext().getProperty("server.url")))); в execLoadSession(). Это означает, что свойство server.url прочитано. Обычно мы определяли его в файле config.ini. При запуске теста вы можете указать, что хотите использовать определенный config.ini файл. Проверьте вкладку «Конфигурация» вашей конфигурации запуска. Другой подход заключается в создании TestingClientSession, в котором URL-адрес жестко закодирован. - person Jmini; 11.03.2015
comment
Спасибо, это очень помогает - person Marko Zadravec; 11.03.2015
comment
У меня проблемы с этим: как вы говорите, я установил config.ini в конфигурации запуска на: scout.ui.rap/products/development/config.ini и получаю сообщение об ошибке: ОШИБКА: дублирующийся псевдоним. Не удалось зарегистрировать сервлет для [alias=/, contributor=com.sixt.leasing.core.scout.server[22]], и не выполняются тесты. Если я установлю для config.ini значение scout.ui.rap/products/production/config.ini, я получу ProcessingException[ProcessingStatus[ERROR code=0 Calling... Вызвано: org.eclipse.scout.rt.shared.servicetunnel.HttpException : 404 - NOT_FOUND для всех служб, но выполняются все тесты, кроме тех, которые требуют служб. - person Marko Zadravec; 11.03.2015
comment
Вам нужно проверить, какой сервлет является повторяющимся псевдонимом. Не видя вашего кода, я не могу помочь... Когда вы устанавливаете его на второй config.ini, каково значение server.url в этом файле? Вы уверены, что ваш сервер доступен по этому адресу? Возможно, вам нужен специальный config.ini для тестов. Как я уже писал в своем ответе, я не очень люблю интеграционные тесты (тесты с сервером). Я предпочитаю модульные тесты с имитацией серверных служб. - person Jmini; 11.03.2015