Как установить путь к классам при использовании бегуна ScalaTest

Допустим, у меня есть типичное фреймворковое приложение на Scala, использующее стандартную структуру папок. Я хочу запускать скомпилированные тесты на сервере CI — эти тесты находятся в папке /tests.

Когда я запускаю скалатестовый бегун, как описано здесь: http://www.scalest.org/user_guide/using_the_runner с помощью следующей команды командной строки:

scala -classpath /home/vagrant/.ivy2/ org.scalatest.tools.Runner -R target

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

java.lang.NoClassDefFoundError: scala/concurrent/duration/Duration
    at org.scalatest.tools.Runner$.<init>(Runner.scala:741

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

Я попытался указать путь к классам «цели», например:

scala -classpath /home/vagrant/.ivy2/cache/org.scalatest/scalatest_2.10/jars/scalatest_2.10-2.0.M8.jar:target org.scalatest.tools.Runner -R target

В «целевой» папке помещаются скомпилированное приложение и тесты для игрового фреймворка. Я запускаю эту команду из корня проекта, поэтому target является допустимым путем к файлу.

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

EDIT Мне удалось вручную добавить jar scala lang в путь к классам, который содержит класс продолжительности. Но как я могу добавить все банки в путь к классам? Есть ли синтаксис подстановочных знаков?

scala -classpath "/home/vagrant/.ivy2/cache/org.scalatest/scalatest_2.10/jars/scalatest_2.10-2.0.M8.jar:/home/vagrant/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.3.jar" org.scalatest.tools.Runner -R target
java.lang.IncompatibleClassChangeError: Found class scala.collection.mutable.ArrayOps, but interface was expected

person user2668128    schedule 27.02.2014    source источник


Ответы (2)


Вот как вы можете использовать Runner для запуска набора тестов:

Скомпилируйте тесты с помощью SBT и упакуйте их нужно запустить позже

и вот как легко добавить несколько файлов jar в ваш путь к классам:

Запуск консоли scala с play 2.2 jars

person yǝsʞǝla    schedule 28.02.2014

Получите путь к классам всех зависимостей с помощью:

DEPS=$(sbt --error "export compile:dependencyClasspath")

А затем запустить тесты:

java -cp "<path to scalatest.jar>":$DEPS org.scalatest.tools.Runner -R target

где <path to scalatest.jar> что-то вроде /home/user/project/.ivy2/cache/org.scalatest/scalatest_2.11/bundles/scalatest_2.11-2.2.6.jar.

Да, вы можете использовать java, а не scala, потому что $DEPS уже содержит все библиотеки Scala.

person mixel    schedule 16.05.2016
comment
Это было полезно! Наш файл build.sbt управляет несколькими проектами, поэтому я получил несколько строк вывода из вашей команды экспорта, и я делаю это для наших модульных тестов, поэтому мне пришлось использовать эту команду для проекта xyz: sbt --error "export xyz/test:dependencyClasspath" - person pacoverflow; 20.03.2019