SBT - как сделать InputTask зависеть от одной задачи и doFinally другой

Мы собираем SBT Build для некоторых автоматизированных тестов Android UI. Цель состоит в том, чтобы запустить сервер Appium, запустить эмулятор Android, запустить тесты, а затем закрыть все. У нас это работает для команды "test" SBT:

(test in Test) <<= 
  (stopVirtual, (test in Test), saveProcessVirtualKey)
  {
    (stop, test, saveProcessVirtualKey) => test.dependsOn(saveProcessVirtualKey).doFinally(stop)
  }

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

(testOnly in Test) <<=
  (stopVirtual, (testOnly in Test), saveProcessVirtualKey)
  {
    (stop, test, saveProcessVirtualKey) => test.dependsOn(saveProcessVirtualKey).doFinally(stop)
  }

Действительно, нам нужно сделать зависимость InputTask от saveProcessVirtualKey и doFinally stopVirtual. Возможно ли это?

Ответ 1

sbt имеет встроенную тестовую настройку и очистку.

Укажите действия по настройке и очистке, используя Tests.Setup и Tests.Cleanup. Они принимают либо функцию типа () => Unit либо функцию типа ClassLoader => Unit. Вариант, который принимает ClassLoader, передается загрузчику классов, который (или был) используется для запуска тестов. Он обеспечивает доступ к тестовым классам, а также к классам каркасных тестов.

Test / testOptions += Tests.Setup( () => println("Setup") )
Test / testOptions += Tests.Cleanup( () => println("Cleanup") )

Будет ли это работать?

Я публикую это во второй раз, потому что мой предыдущий ответ был удален модератором.