我需要一些支持,以支持如何成功地等待从参与者接收块内发送的预期响应消息。
下面的示例与到目前为止在web中可以找到的不同,因为我使用Akka.Cluster / Akka.Cluster.Tools发布消息,而不是直接向发送方发送'Sender.Tell()‘消息。
问题:如何在我的单元测试中获取、订阅等发布的SomeResponse消息?
public class SomeRequest { }
public class SomeResponse { }
public class MyDbTestActor : ReceiveActor
{
private readonly IActorRef _mediator;
public MyDbTestActor()
{
// ...
_mediator = DistributedPubSub.Get(Context.System).Mediator;
// ...
Receive<SomeRequest>(o =>
{
// ...
var response = new SomeResponse();
_mediator.Tell(new Publish(Global.MYTopic, response)); // <-- ExpectMsg timeout ...
//Sender.Tell(response); // if uncommented ExpectMsg is succeed.
});
}
}
class Global
{
public static string MYTopic =nameof(MYTopic);
}
public class SomeActorTests : TestKit
{
[Fact]
public void SomeTest()
{
var actor = Sys.ActorOf(Props.Create<MyDbTestActor>());
actor.Tell(new SomeRequest());
ExpectMsg<SomeResponse>();
}
}发布于 2021-08-12 17:55:26
我只想让TestActor从DistributedPubSub中介处订阅这个主题:
public class SomeActorTests: TestKit
{
private IActorRef _mediator;
private string path;
// pass in an Akka.Cluster config that performs a self-join, etc
public SomeActorTests(Config config, ITestOutputHelper output) : base(config, output:output)
{
_mediator = DistributedPubSub.Get(Sys).Mediator;
}
[Fact]
public void SomeTest()
{
// arrange
var actor = Sys.ActorOf(Props.Create<MyDbTestActor>());
_mediator.Tell(new Subscribe(Global.MYTopic, TestActor));
ExpectMsg<SubscribeAck>(); // subscription confirmed
// act
actor.Tell(new SomeRequest());
// assert
ExpectMsg<SomeResponse>();
}
}这将关闭电路使用Mediator连接您的演员和TestActor在一起。
https://stackoverflow.com/questions/68729008
复制相似问题