我有以下C#代码来测试Akka.net Actor的行为。该语句productActor.Tell(new ChangeActiveStatus(true));
预计将是一个阻止呼叫(TestKit使其成为此博客的同步调用),但我看到它立即返回。结果,尽管Activestatus将在以后更改。
[TestMethod]
public void ProductActorUnitTests_CheckFor_ActiveStatusChanged()
{
var productActor = ActorOfAsTestActorRef<ProductActor>();
Assert.IsTrue(ProductActor.UnderlyingActor.ActiveStatus == false, "The initial ActiveStatus is expected to be FALSE.");
productActor.Tell(new ChangeActiveStatus(true));
Assert.IsTrue(productActor.UnderlyingActor.ActiveStatus == true, "The new ActiveStatus is expected to be TRUE.");
}
******更新*****
带有线程的以下代码。
[TestMethod]
public void ProductActorUnitTests_CheckFor_ActiveStatusChanged()
{
var productActor = ActorOfAsTestActorRef<ProductActor>();
Assert.IsTrue(ProductActor.UnderlyingActor.ActiveStatus == false, "The initial ActiveStatus is expected to be FALSE.");
productActor.Tell(new ChangeActiveStatus(true));
Thread.Sleep(10000);
Assert.IsTrue(productActor.UnderlyingActor.ActiveStatus == true, "The new ActiveStatus is expected to be TRUE.");
}
我只看到两个参与者的akka.net单元测试。显示该示例的博客(在原始问题中)只有两个演员,因此由于操作是同步的,因此它将起作用。如果系统中有多个参与者,例如, Actor A消息b swery cator c Actor c ereads conders a says Actor a再次 ,消息传递会异步发生,因此必须等到所有操作完成。