gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:50 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com