1

PowerMock には ScalaTest のサポートがないため、JUnit を使用して ScalaTest クラスを実行しようとしています@RunWith[classOf[JUnitRunner]]PowerMock wikiで詳しく説明されているように、Maven を使用すると、これをサポートするために熱心にロードするように javaagent モジュールを構成できます。同じ結果を得るには、SBT で何をする必要がありますか?

name := "my-project"

version := "1.0"

scalaVersion := "2.10.2"

libraryDependencies ++= Seq(
    // ... other dependencies above ...
    "org.powermock" % "powermock-api-mockito" % "1.5.1" % "test",
    "org.powermock" % "powermock-module-javaagent" % "1.5.1" % "test",
    "org.powermock" % "powermock-module-junit4-rule-agent" % "1.5.1" % "test",
    "com.novocode" % "junit-interface" % "0.10" % "test->default"
)

示されているように、このプロジェクトにはエラーがあります。

[error] Caused by: java.lang.IllegalStateException: PowerMockRule can only be used with the system classloader but was loaded by sbt.classpath.ClasspathUtilities$$anon$1@1cee593
[error]     at org.powermock.modules.junit4.rule.PowerMockRule.<clinit>(PowerMockRule.java:28)
[error]     ... 55 more

SBT には、テストを実行するための独自のクラスローダーがあり、PowerMock が実行する必要があることと競合しているようです。

4

1 に答える 1

1

SBT 0.12.4 を使用して、以下をbuild.sbt

fork in Test := true

javaOptions in Test <+= managedClasspath in Test map { (cp: Classpath) =>
  val agentJar = cp.find(_.data.name.contains("powermock-module-javaagent")).get
  "-javaagent:" + agentJar.data
}

これにより、SBT はテストを実行するための新しい JVM プロセスを作成し、正しい JVM コマンド ライン引数を追加して javaagent モジュールをプリロードします。

于 2013-08-20T17:15:57.090 に答える