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

本文关键字:消息 自我 测试 Akka NET | 更新日期: 2023-09-27 18:18:18

我是新来的。. 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>();
    }
}

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

Failed: Timeout 00:00:03 while waiting a type of akkanettestplaygroundMySuperActorSuperMessage

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

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

Alberto。

实际上,在测试方法中调用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>();
    }