是否可以测试我的演员使用特定的var spliceJoin = [];
?例如。我想确定在child actor抛出异常之后,它将被停止并且父actor将收到SupervisionStrategy
消息。
我试图以这种方式做到:
Terminated
不幸的是,它不起作用。似乎[TestFixture]
public class SupervisionStrategyTest : TestKit
{
public SupervisionStrategyTest() : base(@"akka.suppress-json-serializer-warning=true")
{
XmlConfigurator.Configure();
}
[Test]
public void Test()
{
var parent = Sys.ActorOf(Props.Create<ParentActor>());
var testProbe = CreateTestProbe("subscriber");
parent.Tell(testProbe);
parent.Tell(new object());
var t = testProbe.ExpectMsg<ChildActor.Terminated>(10.Seconds());
}
public class ParentActor : ReceiveActor
{
private TestProbe parent;
public ParentActor()
{
var child = Context.ActorOf<ChildActor>();
Receive<TestProbe>(
m =>
{
parent = m;
});
// when child actor stopped we should receive this, but we don't
Receive<Terminated>(
m =>
{
parent.Tell(new ChildActor.Terminated());
});
ReceiveAny(
m =>
{
child.Tell(new object());
});
}
protected override SupervisorStrategy SupervisorStrategy()
{
return new OneForOneStrategy(
maxNrOfRetries: 0, // no restarts
withinTimeRange: TimeSpan.FromSeconds(30),
localOnlyDecider: x => Directive.Stop);
}
}
public class ChildActor : UntypedActor
{
protected override void OnReceive(object message)
{
throw new Exception("Test");
}
public class Terminated
{
}
}
}
无法从akka系统获取Parent
消息。它是TestKit中的错误还是我遗漏了什么?