[英]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.