Как заказать тест-кейсы для Spoon Automated Testing в Android?

Я добавил метод suite(), чтобы упорядочить мои тесты так, как я хочу, и поэтому, когда я запускаю его через Android JUnit, они выполняются соответствующим образом. Но затем я заметил, что когда я использую выполнение Spoon, то есть тот, который использует cmd, мои тестовые примеры выполняются в алфавитном порядке, что является порядком по умолчанию.

Почему это происходит и как бы вы боролись с этим, не переименовывая мои тестовые примеры?


person John Ernest Guadalupe    schedule 03.04.2014    source источник


Ответы (2)


У меня та же проблема, что и у вас; Мне нужен определенный порядок, в котором должен выполняться мой тест. Приложение, которое я тестирую, слишком сложное, чтобы запускать его в непредсказуемом порядке. Мое решение было таким:

Добавьте это в свой build.gradle:

spoon {
     if (project.hasProperty('spoonClassName')){
         className = project.spoonClassName
      }
}

Теперь вы можете выполнить определенный класс с помощью следующей команды:

градуированная ложка -PspoonClassName=‹ com.your.pakage.ClassName>

Далее создайте файл в корне проекта Android: runAllTests.sh

Отредактируйте свой .sh, чтобы он выглядел так:

 #!/bin/sh
 date +%b-%dT%H.%M > timestamp.out

 sites="$HOME"/path/to/project/root

 timestamp="$(cat "$sites"/timestamp.out)"
 result_folder="$sites"/results
 destdir="$result_folder/Results-$timestamp"

 mkdir -p "$destdir"
 echo "Directory created: ${destdir##*/}"

 <---------- Here you start running the test --------------->

 echo "Starting Master Setup"
 gradle spoon -PspoonClassName=com.espresso.test.MasterSetup
 cp -r "$sites"/app/build/spoon "$destdir"/MasterSetup
 echo "Results saved to MasterSetup"

 echo "Starting WorkoutSchedule"
 gradle spoon -PspoonClassName=com.espresso.test.WorkoutSchedule
 cp -f "$sites"/app/build/spoon "$destdir"/WorkoutSchedule
 echo "Results saved to WorkoutSchedule"

 echo "Starting Setting.test"
 gradle spoon -PspoonClassName=com.espresso.test.Settings
 cp -r "$sites"/app/build/spoon "$destdir"/Settings
 echo "Results saved to Settings"

Затем предоставьте скрипту разрешения

  1. cd к сценарию
  2. введите chmod u+x runAllTest.sh

Все готово. Теперь просто введите cd в свой корень, затем, чтобы выполнить тест, введите . runAllTest.sh.

Итак, что это делает:

  1. Во-первых, он создает временную метку.out. Я использую это, чтобы я мог сохранять свои результаты в файл снова и снова без перезаписи предыдущих результатов. Вам не нужна эта часть.
  2. Затем он создает папку result в корне вашего проекта, если ее там еще нет.
  3. Затем он создаст папку внутри папки результатов с именем Results-SOME-DATE.
  4. Наконец, каждый тест будет запущен, и результаты будут сохранены в обычном месте вашего проекта. (Внутри сборки/ложки) После завершения теста он скопирует результаты в папку результатов и назовет каждый результат теста соответствующим образом, чтобы было легко увидеть все ваши тесты.

ПРИМЕЧАНИЕ. Этот сценарий был написан для MAC. Если вы используете Windows или что-то еще, этот скрипт может нуждаться в изменениях.


Дополнительно: вам будет неудобно открывать каждую папку, чтобы открыть index.html. Поэтому я написал этот скрипт, чтобы добавить к вашему bash_profile:

function open-results () {
  # the browser to open up `index.html' in.
  browser='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'

  # let the user know what directory we're looking in
  printf "looking in %s" "$(pwd)"
  echo ...

  for paths in $(find ./ -name 'debug' -type d); do
    for files in $(find "$paths" -name 'index.html'); do
     open -a "$browser" "$files"
    done
  done
  echo done
 } 

Теперь cd в терминале на Results-SOME-DATE и введите open-results. Опять же, это было написано для терминала. Возможно, вам придется изменить в зависимости от вашей ОС. Но структура должна быть одинаковой

Надеюсь, это поможет.

person Chad Bingham    schedule 05.06.2014

Философия тестирования jUnit заключается в том, что тестовые примеры не должны зависеть друг от друга, поэтому порядок не должен иметь значения. Вот почему тебе трудно это сделать. Возможно, вы захотите рассмотреть возможность использования метода «setUp» для создания начальных условий для ваших тестовых случаев, а не для их построения друг на друге.

person AndroidGuy    schedule 04.04.2014
comment
Ну, дело в том, что у моего приложения есть база данных, и данные в ней будут влиять на его макет, например, на отключение кнопок и представлений. Итак, мне нужен способ убедиться, что тестовые примеры выполняются по порядку. Или есть способ очистить данные моего приложения через robotium? - person John Ernest Guadalupe; 07.04.2014