我在文档中关注akka.net tutorial:
我有以下测试方法:
[TestMethod]
public void DeviceGroup_actor_must_be_able_to_collect_temperatures_from_all_active_devices()
{
TestUtilities.WriteLine("DeviceTests Begin");
TestProbe probe = CreateTestProbe();
IActorRef groupActor = Sys.ActorOf(DeviceGroup.Props("group"));
groupActor.Tell(new RequestTrackDevice("group", "device1"), probe.Ref);
// probe.ExpectMsg<DeviceRegistered>();
IActorRef deviceActor1 = probe.LastSender;
groupActor.Tell(new RequestTrackDevice("group", "device2"), probe.Ref);
// probe.ExpectMsg<DeviceRegistered>();
IActorRef deviceActor2 = probe.LastSender;
groupActor.Tell(new RequestTrackDevice("group", "device3"), probe.Ref);
// probe.ExpectMsg<DeviceRegistered>();
IActorRef deviceActor3 = probe.LastSender;
// Check that the device actors are working
deviceActor1.Tell(new RecordTemperature(requestId: 0, value: 1.0), probe.Ref);
// probe.ExpectMsg<TemperatureRecorded>(s => s.RequestId == 0);
deviceActor2.Tell(new RecordTemperature(requestId: 1, value: 2.0), probe.Ref);
// probe.ExpectMsg<TemperatureRecorded>(s => s.RequestId == 1);
// No temperature for device3
groupActor.Tell(new RequestAllTemperatures(0), probe.Ref);
//probe.ExpectMsg<RespondAllTemperatures>(msg =>
// msg.Temperatures["device1"].AsInstanceOf<Temperature>().Value == 1.0 &&
// msg.Temperatures["device2"].AsInstanceOf<Temperature>().Value == 2.0 &&
// msg.Temperatures["device3"] is TemperatureNotAvailable &&
// msg.RequestId == 0);
TestUtilities.WriteLine("DeviceTests End");
Thread.Sleep(TimeSpan.FromSeconds(5));
}
执行此测试时,出现以下错误:
Akka.Actor.IllegalActorStateException消息=最后接收没有 出队消息
我必须注释掉以下行
// probe.ExpectMsg<DeviceRegistered>();
因为它取决于Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0
,而我没有。
我在那行之后有问题;
IActorRef deviceActor1 = probe.LastSender;
这是因为probe.ExpectMsg<DeviceRegistered>();
在内部使消息出队吗?如果是,我该如何模仿该行为,以便下一行不会引发异常?