经过多次努力,我终于将一个大项目从 Maven 转换为 SBT。然而,剩下的问题之一是项目中的一些单元测试使用 jMockit,这在配置环境时可能有点难以维护。
具体来说,jmockitdependency/jar 有两个困难的要求:
-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)
Run Code Online (Sandbox Code Playgroud)
我想我最终成功地用 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>"
)
Run Code Online (Sandbox Code Playgroud)
根据以下输出,我认为类路径没问题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), ...)
Run Code Online (Sandbox Code Playgroud)
所以我认为我的javaagent设置没有达到预期的结果。
如果我碰巧让它工作,我的下一个问题是如何从那里获取硬编码的 jmockit.jar 路径,但现在我将满足于通过测试用例。
那么,如何设置用于测试的 JVM 选项呢?启动测试时如何查看/验证实际使用了哪些选项?
您需要将您的更改javaOptions为javaOptions in Test(注意TinTest是大写的)。
您可以通过执行来检查您的选项show test:javaOptions
> show test:javaOptions
[info] List(-javaagent:/home/lpiepiora/.ivy2/cache/com.googlecode.jmockit/jmockit/jars/jmockit-1.7.jar)
Run Code Online (Sandbox Code Playgroud)
另外,如果你想使用jmockitjavaOptions jar 的动态路径,你可以这样设置:
def jmockitPath(f: Seq[File]) = f.filter(_.name.endsWith("jmockit-1.7.jar")).head
javaOptions in Test += s"-javaagent:${jmockitPath((dependencyClasspath in Test).value.files)}"
Run Code Online (Sandbox Code Playgroud)
libraryDependencies += "com.novocode" % "junit-interface" % "0.9" % "test"
libraryDependencies ++= Seq(
"com.googlecode.jmockit" % "jmockit" % "1.7" % "test",
"junit" % "junit" % "4.8.1" % "test"
)
fork in Test := true
def jmockitPath(f: Seq[File]) = f.filter(_.name.endsWith("jmockit-1.7.jar")).head
javaOptions in Test += s"-javaagent:${jmockitPath((dependencyClasspath in Test).value.files)}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |