c# - 在 Akka.NET 中测试 self 消息发送

标签 c# unit-testing akka.net akka-testkit

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

这是我的 Actor 代码:

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>();
    }
}

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

失败:WAITING AkkaNetTestPlaygroung.MySuperActorSuperMessage 类型的消息时超时 00:00:03

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

最佳答案

阿尔贝托。

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

关于c# - 在 Akka.NET 中测试 self 消息发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33220826/

相关文章:

c# - var 关键字并不总是有效?

c# - ASP.NET 和 Controller 中的静态方法

ios - Xcode 5.1 打破了一些测试

akka.net actor并行执行

ssl - Akka.NET TLS 实现

akka.net - 如何使用 Akka.net 中的 TestKit 测试 DistributedPubSub?

c# - 从 IronPython 脚本访问主机类

C#:代码风格 - 成员位置

c# - XNA 模拟游戏对象或解耦你的游戏

iphone - SentTestCase 不会将 UnitTest 失败突出显示为代码中的错误