2013-08-20 60 views
1

PowerMock沒有ScalaTest支持,所以我試圖使用JUnit來運行我的ScalaTest類,使用@RunWith[classOf[JUnitRunner]]。使用Maven,您可以將javaagent模塊配置爲急切加載以支持此操作,詳見the PowerMock wiki。我需要在SBT中做什麼來獲得相同的結果?如何使用PowerMock模擬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 [email protected] 
[error]  at org.powermock.modules.junit4.rule.PowerMockRule.<clinit>(PowerMockRule.java:28) 
[error]  ... 55 more 

看來SBT有其自己的運行是什麼PowerMock需要做的衝突的測試類加載器。

回答

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模塊。

+0

我很想看到一個更簡單的查找javaagent jar路徑的版本,比如以某種方式直接通過它的ID查找依賴項,但是掃描classpath是我能找到的唯一方法。 –

相關問題