[英]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.