繁体   English   中英

具有特定 ID 的模拟子演员 Akka Java

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM