Google AppEngine + локальные тесты JUnit + фреймворк Jersey + Embedded Jetty

Я использую Google Appengine для Java (GAE / J). Сверху использую REST-фреймворк Jersey.

Теперь я хочу запустить локальные тесты JUnit. Тест

К сожалению, комбинация Jersey / Jetty порождает новые темы. GAE ожидает, что будет запущен только один поток. В конце концов, у меня либо нет хранилища данных внутри ресурсов Джерси, либо несколько, имеющих разные хранилища данных.

В качестве обходного пути я инициализирую локальный env GAE только один раз, помещаю его в статическую переменную и внутри ресурса GAE добавляю много проверок (в этих потоках нет dev env? Используйте статический env повторно). И эти проверки должны, конечно же, выполняться только внутри тестов JUnit ... (о чем я раньше спрашивал: «Как я могу узнать, выполняется ли код внутри теста JUnit или нет?» - Мне не разрешено разместить ссылку прямо здесь: - |)


person Community    schedule 28.02.2010    source источник


Ответы (2)


Возможно, используйте свойство System ... Когда это запускается Junit, установите системное свойство Java с помощью аргумента JVM, которое вы затем можете проверить на что-то вроде этого:

  • передать аргумент JVM через параметры конфигурации запуска при тестировании (возможно, в среде IDE и т. д.) следующим образом: -DRunningTestsOnly=true
  • в коде: if ("true".equals(System.getProperty("RunningTestsOnly")))

Я делал подобное в тестах JUnit раньше, используя предположение, чтобы игнорировать тесты, которые, как мне кажется, занимают слишком много времени для запуска на моем слабомощном компьютере разработчика ...

  • передать в аргументе JVM: -DexecuteQuickRunningTestsOnly=true
  • Чтобы игнорировать медленный тестовый метод, если свойство установлено, я помещаю вверху метода: assumeThat(System.getProperty("executeQuickRunningTestsOnly", "false"), is("false"));
person Community    schedule 04.03.2010
comment
Также рассмотрите возможность использования переменных среды, доступ к которым осуществляется в коде, например, через String runLevel = System.getenv("RUN_LEVEL");. Этот независимый от языка механизм популярен тем, что позволяет вашей программе иметь разные параметры конфигурации в разных средах (разработка, тестирование, интеграция, CI, производство и т. Д.) - person gb96; 23.08.2017
comment
Кроме того, если вы используете Gradle, он автоматически устанавливает свойство org.gradle.test.worker при тестировании, см. документацию - person CLOVIS; 09.07.2018

Просто идея: вы можете создать исключение, а затем перебрать трассировку стека исключения, чтобы увидеть, есть ли там класс из пакета junit.

person Community    schedule 09.05.2010