簡體   English   中英

使用TestKit測試Akka.NET的Context.Parent

[英]Testing Akka.NET's Context.Parent with TestKit

我有一個演員通過向其父母發送消息來響應消息,就像這樣......

public void Handle(string message)
{
    Context.Parent.Tell("Hello");
}

我現在想測試消息是否發送給Actors Parent,但無法弄清楚如何。 我目前的測試看起來如下......

pubilc void AllResponsesWillGoToParent()
{
    ActorOf<MyActor>().Tell("Respond to parent");

    ExpectMsg<string>(x => x == "Hello");
}

這當然不起作用,因為actors parent是測試ActorSystem,而不是分配給TestActor屬性的actor。

有誰知道我怎么測試消息確實發送給它的父親,謝謝。

您可以通過創建所需的actor作為TestActorRef ,然后將TestActor設置為其主管來解決此問題。 這使您可以使用TestActor所有內置語義,例如ExpectMsg<>

(有關進一步的參考,建議您查看本指南 ,對我編寫的Akka.NET演員進行單元測試。)

你可以這樣做(使用NUnit):

using System;
using Akka.Actor;
using Akka.TestKit.NUnit;
using NUnit.Framework;

namespace ParentTestExample
{
    public class ParentGreeter : ReceiveActor
    {
        public ParentGreeter()
        {
            Receive<string>(s => string.Equals(s, "greet parent"), s =>
            {
                Context.Parent.Tell("Hello parent!");
            });
        }
    }

    [TestFixture]
    public class ParentGreeterSpecs : TestKit
    {
        [Test]
        public void Parent_greeter_should_greet_parent()
        {
            Props greeterProps = Props.Create(() => new ParentGreeter());
            // make greeter actor as child of TestActor
            var greeter = ActorOfAsTestActorRef<ParentGreeter>(greeterProps, TestActor);
            greeter.Tell("greet parent");

            // TestActor captured any message that came back
            ExpectMsg("Hello parent!");
        }
    }
}

解決此問題的一個選擇是創建假父,即創建您正在測試的真實子actor。 此父級將消息從子級轉發到測試探針或TestActor本身。

更多模式http://hs.ljungblad.nu/post/69922869833/testing-parent-child-relationships-in-akka讓我知道你是否需要ac#snippet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM