我想測試一個在Eclipse SDK(構建ID:3.0.2-vfinal-20131028-1923-Typesafe)的Scala IDE構建中使用java的單身演員和阿卡是2.3.1。Junit測試一個Akka單身演員:preStart()鉤子不叫
public class WorkerTest {
static ActorSystem system;
@BeforeClass
public static void setup() {
system = ActorSystem.create("ClusterSystem");
}
@AfterClass
public static void teardown() {
JavaTestKit.shutdownActorSystem(system);
system = null;
}
@Test
public void testWorkers() throws Exception {
new JavaTestKit(system) {{
system.actorOf(ClusterSingletonManager.defaultProps(
Props.create(ClassSingleton.class), "class",
PoisonPill.getInstance(),"backend"), "classsingleton");
ActorRef selection = system.actorOf(ClusterSingletonProxy.defaultProps("user/classsingleton/class", "backend"), "proxy");
System.out.println(selection);
}};
}
}
的ClassSingleton.java:
public class ClassSingleton extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
public ClassSingleton() {
System.out.println("Constructor is done");
}
public static Props props() {
return Props.create(ClassOperator.class);
}
@Override
public void preStart() throws Exception {
ActorRef selection = getSelf();
System.out.println("ClassSingleton ActorRef... " + selection);
}
@Override
public void onReceive(Object message) {
}
@Override
public void postStop() throws Exception {
System.out.println("postStop ... ");
}
}
的ClassSingleton演員無所事事,打印輸出: 演員[阿卡:// ClusterSystem /用戶/代理#-893814405]唯一的,這是從ClusterSingletonProxy打印。沒有例外和Junit完成,綠旗。在調試中不調用ClassSingleton(包括構造函數和preStart())。當然是我,但是錯誤是什麼?更令人困惑的是,同樣的ClassSingleton ClusterSingletonManager代碼在javatestkit和junit之外工作得很好。
我懷疑羣集設置可能是負責任的,所以我試圖包含和排除下面的代碼(沒有效果)。不過,我想明白爲什麼我們需要它,如果我們需要它(它來自示例代碼)。 非常感謝您的幫助。
Address clusterAddress = Cluster.get(system).selfAddress();
Cluster.get(system).join(clusterAddress);
沒有成功,我檢查了配置,端口等等,我訂購了集羣域事件,沒有事件,沒有死系統,但是沒有JUnit也沒問題。我很感激,如果有人能給我一個工作junit的例子(配置)。 – user1229873
更新:我可以設置簡單的演員,發送和處理消息,其他人仍然失敗。 – user1229873
https://github.com/almendar/akka-junit-sample < - 試試這個。它是否滿足您的需求? 看看'testWorkers'最後一行。如果你評論它不起作用,我已經放了一個'sleep'。 – almendar