[英]Mock Child Actors Akka Java with Specific Ids
我正在使用Akka 2.5.23
。 我有一個父參與者forwards
Register Message
forwards
給孩子,孩子用Initialized message
回復original sender
。
我正面臨一些艱難的時間單元測試此代碼流。 我正在嘗試為父級外部化創建子級,但似乎無法弄清楚如何在創建child actor
時傳遞定義child actor
的名稱
下面是我的ParentActor
public class ParentActor extends AbstractLoggingActor {
private final Function<ActorRefFactory, ActorRef> childMaker;
public ParentActor() {
this.childMaker = arg -> {
return context().actorOf(ChildActor.props("ID", appContext), "ACTOR_NAME");
};
}
private void handleRegisterMessage(RegisterMessage message){
childMaker.apply(context());
// what I generally do:
// context().actorOf(ChildActor.props(message.getUniqueId(), "TransChild-" + message.getUniqueId());
}
}
以下是我的ChildActor
:
public class ChildActor extends AbstractLoggingActor {
private final String uniqueId;
public ChildActor(String uniqueId){
this.uniqueId = uniqueId;
}
public static Props props(String uniqueId) {
return Props.create(ChildActor.class, uniqueId);
}
}
誰能幫我這個?
他的 ID 是根據輸入消息生成的。 父級創建一個具有特定 id(源自消息)的子 Actor。 該唯一 ID 通過
Props
傳遞給孩子,PreStart()
上的孩子根據通過道具傳遞的PreStart()
執行操作
不完全確定我理解哪個部分是問題,但是,您可以:
將“childMaker” BiFunction<String, ActorRefFactory, ActorRef>
並使用 `but 在測試中返回探測器或生成的測試特定角色在主要BiFunction<String, ActorRefFactory, ActorRef>
創建命名子項。
所以代替f -> f.actorOf(Props.create(Child.class))
你會做(name, f) -> f.actorOf(props, name)
老實說,我可能不會使用 lambda,而是在 Java 的 Actor 類中定義一個protected ActorRef spawnChild(RegisterMessage message)
方法,並在測試中覆蓋它。 可能會更清楚,不知道為什么我們在文檔中有這樣一個例子。
您可以使用計數器並將其附加到您要賦予該演員的演員名稱的末尾。 喜歡,
public ParentActor() {
int counter = 0;
this.childMaker = arg -> {
return context().actorOf(ChildActor.props("ID", appContext), "ACTOR_NAME" + counter++);
};
}
您不能創建多個同名演員。 有關創建演員的更多信息,您可以閱讀此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.