今日、Intellij で簡単な TestKit テストを実行する際に問題が発生しました。テストは Scala コード用で (私は Intellij 用の Scala プラグインを持っています)、 Ray Roestenburg の exampleに基づいています。
Intellij プロジェクトは、「Maven モジュール」を使用して作成され、すべての依存関係を追加してプロジェクトを作成しました。テストは次の場所にあります。
ActorBlast/src/test/scala/basicTest.scala
私は基本的に、テストを「右クリック」して「実行」を選択しています。私が得るのは次のエラーです:
"C:\Program Files\Java\jdk1.7.0_25\bin\java" -Didea.launcher.port=7540... 午後 2:29 にテストを開始しました... Suite クラスをロードできません。これは、実行パスのエラーが原因である可能性があります。
欠落しているクラス: BasicActorSpec java.lang.ClassNotFoundException: BasicActorSpec at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController. doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java: 308) で java.lang.ClassLoader.loadClass(ClassLoader.java:357) で org.scalatest.tools.Runner$$anonfun$35.apply(Runner.scala:2393) で org.scalatest.tools.Runner$$anonfun$35 .apply(Runner.scala:2391) で scala.collection.TraversableLike$$anonfun$filter$1.apply(TraversableLike.scala:264) で scala.collection.immutable.List.foreach(List.scala:318) で scala.コレクション。TraversableLike$class.filter(TraversableLike.scala:263) at scala.collection.AbstractTraversable.filter(Traversable.scala:105) org.scalatest.tools.Runner$.doRunRunRunDaDoRunRun(Runner.scala:2391) at org.scalatest. tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1006) at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1005) at org.scalatest.tools.Runner$ .withClassLoaderAndDispatchReporter(Runner.scala:2659) at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1005) at org.scalatest.tools.Runner$.run(Runner.scala:845) at org.scalatest. tools.Runner.run(Runner.scala) at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:144) at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:35) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) の sun.reflect.DelegatingMethodAccessorImpl. com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) で java.lang.reflect.Method.invoke(Method.java:606) で呼び出し (DelegatingMethodAccessorImpl.java:43)execution.application.AppMain.main(AppMain.java:120)execution.application.AppMain.main(AppMain.java:120)
プロセスは終了コード 0 で終了しました
これが何を意味するのか理解できません。私は多くの検索を行いましたが、答えが見つからないようです。ランナーが見つからないことについて不平を言っているクラスは、私がテスト/実行しようとしているクラスであることに注意してください。basicTest.scala は次のようになります。
// Testing specific imports
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import org.scalatest.{ShouldMatchers, WordSpecLike, BeforeAndAfterAll}
import akka.testkit.{TestKit, DefaultTimeout, ImplicitSender}
// Actor specific imports
import akka.actor.{ActorRef, Actor, ActorSystem, Props}
// Misc. needed imports
import scala.concurrent.duration._
import com.typesafe.config.ConfigFactory
// In order to run tests in this module you need to use JUnitRunner (as per scalatest.org)
@RunWith(classOf[JUnitRunner])
class BasicActorSpec extends TestKit(ActorSystem("BasicActorSpec", ConfigFactory.parseString(BasicActorSpec.config)))
with DefaultTimeout with ImplicitSender with WordSpecLike with ShouldMatchers with BeforeAndAfterAll {
import BasicActorSpec._
val echoRef = system.actorOf(Props[EchoActor])
val forwardRef = system.actorOf(Props[ForwardActor])
override def afterAll {
shutdown(system)
}
/**
* The actual tests...
*/
"An EchoActor" should {
"Respond with the same message it receives" in {
within(500 millis) {
echoRef ! "test"
expectMsg("test")
}
}
}
"A Forwarding Actor" should {
"Forward a message it receives" in {
within(500 millis) {
forwardRef ! "test"
expectMsg("test")
}
}
}
}
/**
* Companion object of test class
*/
object BasicActorSpec {
val config =
"""
|akka {
| loglevel = "Warning"
|}
""".stripMargin
/**
* Classes of Actors used in testing
*/
class EchoActor extends Actor {
def receive = {
case msg => sender ! msg
}
}
class ForwardActor(next: ActorRef) extends Actor {
def receive = {
case msg => next ! msg
}
}
}
なぜこのエラーが発生するのかについての助けをいただければ幸いです。