1

Java 8 と Akka 2.12:2.5.16 こちら。私は、Akka TestKitを利用して初めての (これまでの) Akka 単体テストを作成しようとしていますが、オンラインで見つけた (非常に少ない) 例に見られる原則を適用するのに苦労しています。

私の俳優:

public class Child extends AbstractActor {
    @Override
    public Receive createReceive() {
        return receiveBuilder()
            .match(Init.class, init -> {
                int workUnit = workService.doSomeWork();
                log.info("Performed work on {}", workUnit);
            }).build();
    }
}

public class Master extends AbstractActor {
    @Inject @Named("CHILD")
    private ActorRef child;

    @Override
    public Receive createReceive() {
        return receiveBuilder()
            .match(Init.class, init -> {
                child.tell(init, self());
            }).build();
    }
}

とてもとてもシンプルです。Masterここで、アクターがメッセージを受信したときに、Initそのメッセージをアクターに転送することを確認する単体テストを作成したいと思いますChild。これまでの私の最善の試み:

@RunWith(MockitoJUnitRunner.class)
public class MasterTest {
    private ActorSystem actorSystem;

    @Before
    public void setup() {
        actorSystem = ActorSystem.create("test-system");
    }

    @After
    public void teardown() {
        Duration duration = Duration.create(10L, TimeUnit.SECONDS);
        TestKit.shutdownActorSystem(actorSystem, duration, true);
        actorSystem = null;
    }

    @Test
    public void onInit_shouldSendFordwardToChild() {
        // Given
        TestKit testKit = new TestKit(actorSystem);
        ActorRef master = actorSystem.actorOf(Props.create(Master.class, testKit));

        // When
        master.tell(new Init(), ActorRef.noSender());

        // Then
        testKit.expectMsg(Init.class);
    }
}

これを実行すると、次のようになります。

java.lang.IllegalArgumentException: no matching constructor found on class com.me.myapp.Master for arguments [class akka.testkit.TestKit]

TestKitインスタンスを私のMasterアクターに接続するのを手伝ってくれますMasterTestか? 前もって感謝します!

4

1 に答える 1