2015-08-20 33 views
1

我只是與Akka溼了我的腳。我試圖用JavaTestKit從這個Maven的依賴寫JUnit測試:來自默認調度程序的未捕獲錯誤導致JavaTestKit的致命錯誤

<dependency> 
     <groupId>com.typesafe.akka</groupId> 
     <artifactId>akka-actor_2.10</artifactId> 
     <version>2.3.12</version> 
    </dependency> 
    <dependency> 
     <groupId>com.typesafe.akka</groupId> 
     <artifactId>akka-testkit_2.11</artifactId> 
     <version>2.3.12</version> 
    </dependency> 

即使JavaTestKit實例,做什麼都不會拋出一個致命異常,所以我懷疑有一個配置問題。本課程將重現該問題:

import akka.actor.ActorSystem; 
import akka.event.Logging; 
import akka.event.LoggingAdapter; 
import akka.testkit.JavaTestKit; 

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.Test; 

public class GameTest { 
    static ActorSystem system; 
    static LoggingAdapter log; 

    @BeforeClass 
    public static void setup() { 
    system = ActorSystem.create(); 
    log = Logging.getLogger(system, GameTest.class); 
    } 

    @AfterClass 
    public static void teardown() { 
     JavaTestKit.shutdownActorSystem(system); 
     system = null; 
    } 

    @Test 
    public void gutterGameTest() { 
     log.info("gutterGameTest started"); 
     new JavaTestKit(system) {{ 
     // even when empty, the exception is thrown during initialization 
     }}; 
    } 
} 

這裏的例外:

[ERROR] [08/20/2015 07:55:10.614] [default-akka.actor.default-dispatcher-4] [ActorSystem(default)] Uncaught error from thread [default-akka.actor.default-dispatcher-4] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled 
java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object; 
    at akka.testkit.CallingThreadDispatcherQueues.registerQueue(CallingThreadDispatcher.scala:64) 
    at akka.testkit.CallingThreadMailbox$$anon$1.initialValue(CallingThreadDispatcher.scala:318) 
    at akka.testkit.CallingThreadMailbox$$anon$1.initialValue(CallingThreadDispatcher.scala:315) 
    at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:180) 
    at java.lang.ThreadLocal.get(ThreadLocal.java:170) 
    ... 

我使用的是默認配置。還有什麼我需要設置爲JavaTestKit按預期工作?

回答

0

我想出了這個問題。它必須處理Akka和Testkit庫(Scala 2.10 vs 2.11)的不兼容組合。以下Maven相關性按預期工作:

<dependency> 
     <groupId>com.typesafe.akka</groupId> 
     <artifactId>akka-actor_2.10</artifactId> 
     <version>2.3.12</version> 
    </dependency> 
    <dependency> 
     <groupId>com.typesafe.akka</groupId> 
     <artifactId>akka-testkit_2.10</artifactId> 
     <version>2.3.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>2.10.5</version> 
    </dependency> 
相關問題