在 Akka.NET 中测试自我消息发送

Testing self message send in Akka.NET

我是Akka.NET的新人,目前我很难测试我的演员是否向他自己发送了任何消息。

这是我的演员代码:

public class MySuperActor : ReceiveActor
{
    private readonly IActorRef _anotherActor;

    public RoteadorDeContratosSuspensoActor(IActorRef anotherActor)
    {
        _anotherActor = anotherActor;
        Receive<MySuperActorMessage>(m => HandleMessage(m));
        Receive<MySuperActorSuperMessage>(m => HandleSuperMessage(m));
    }

    private void HandleMessage(MySuperActorMessage message)
    {
        Self.Tell(new MySuperActorSuperMessage(message));
    }

    private void HandleSuperMessage(MySuperActorSuperMessage message)
    {
        _anotherActor.Tell(new AnotherActorMessage(message));
    }
}

这是我的测试代码

[TestFixture]
public class MySuperActorTest : TestKit
{
    private IActorRef _sut;
    private IActorFactory _actorFactory;
    private List<Contrato> _contratos;
    private Props _props;

    [Test]
    public void WhenReceiveASimpleMessageActorShouldSendSuperMessageToHimself()
    {
        var testProbe = CreateTestProbe();
        Props props = Props.Create<MySuperActor>(testProbe);
        var sut = ActorOf(_props);
        sut.Tell(new MySuperActorMessage());

        ExpectMsg<MySuperActorSuperMessage>();
    }
}

我的测试总是中断并显示以下消息:

失败:等待 AkkaNetTestPlaygroung.MySuperActorSuperMessage

类型的消息时超时 00:00:03

我如何检查我的演员是否正在向他自己发送另一条消息?

阿尔贝托。

实际上,在您的测试方法中调用 ExpectMsg() 会期望消息被发送回您的测试参与者系统(我的意思是一个上下文,初始 MySuperActorMessage 在其上被发送),而不是 MySuperActor 实例。最好(也更正确)期望在测试探针上创建您在测试中创建的 AnotherActorMessage 实例。

这里是一个通过的测试方法:

    [Test]
    public void WhenReceiveASimpleMessageActorShouldSendSuperMessageToHimself()
    {
        var testProbe = this.CreateTestProbe();
        var props = Props.Create<MySuperActor>(testProbe);
        var sut = this.Sys.ActorOf(props);
        sut.Tell(new MySuperActorMessage());

        testProbe.ExpectMsg<AnotherActorMessage>();
    }