После долгих мучений я наконец получил большой проект, переведенный с Maven на SBT. Одна из оставшихся проблем, однако, заключается в том, что некоторые из модульных тестов в проекте используют jMockit, который может быть немного сложным, когда дело доходит до настройки среды.
В частности, зависимость/jar jmockit
имеет два сложных требования:
- Jmockit jar должен появиться в пути к классам перед junit jar
- Во многих JVM, таких как OpenJDK, который я использую, требуется аргумент JVM
-javaagent:<path/to/jmockit.jar>
Если оба этих условия не выполняются, я сталкиваюсь с ошибкой:
[error] Test <mytestclass>.initializationError failed: java.lang.Exception: Method <mytestmethod> should have no parameters
[error] at mockit.integration.junit4.JMockit.<init>(JMockit.java:32)
Я думаю, что в конце концов мне удалось позаботиться о № 1 с помощью SBT, но у меня все еще есть проблемы со вторым. Журналы отладки SBT не показывают достаточно подробностей о вызове разветвленного процесса, чтобы сказать мне, работают ли мои настройки или нет. Но вывод теста постоянно указывает на то, что он не работает. У меня есть то, что я думаю, все соответствующие настройки:
lazy val myproj = Project(
...
settings = otherSettings ++ Seq(
libraryDependencies ++= Seq(
"com.googlecode.jmockit" % "jmockit" % "1.7" % "test",
"junit" % "junit" % "4.8.1" % "test"
),
fork in Test := true,
javaOptions in test += "-javaagent:<hardcode-path-to-jmockit.jar>"
)
Я думаю, что путь к классам в порядке, основываясь на выводе test:dependencyClasspath
:
sbt> project <myproject>
sbt> show test:dependencyClasspath
[info] List(...., Attributed(/var/build/ivy2/cache/junit/junit/jars/junit-4.8.1.jar), ...
..., Attributed(/var/build/ivy2/cache/com.googlecode.jmockit/jmockit/jars/jmockit-1.7.jar), ...)
Поэтому я думаю, что моя настройка javaagent
не дает ожидаемого результата.
Если мне удастся заставить это работать, мой следующий вопрос заключается в том, как получить оттуда жестко закодированный путь jmockit.jar, но пока я соглашусь на проходной тестовый пример.
Итак, как мне установить параметры JVM, используемые для тестирования? Как просмотреть/проверить, какие параметры фактически используются при запуске тестов?