3

我是 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

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

4

1 回答 1

3

阿尔贝托。

实际上,在您的测试方法中调用 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>();
    }
于 2015-10-20T17:45:49.583 回答