Akka.TestKit:上次接收未使消息出队

时间:2018-11-01 20:42:43

标签: akka.net

我在文档中关注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>();在内部使消息出队吗?如果是,我该如何模仿该行为,以便下一行不会引发异常?

0 个答案:

没有答案
相关问题