我有以下C#代码来测试AKKA.NET actor的行为。语句productActor.Tell(new ChangeActiveStatus(true));
应该是一个阻塞调用(TestKit根据此blog使其成为同步调用)但我看到它立即返回。因此,尽管稍后将更改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.");
}
******更新*****
使用Thread.Sleep(10000)的以下代码成功:
[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.");
}
答案 0 :(得分:0)
我见过的大多数AKKA.NET单元测试只使用了两个演员。显示示例的博客(在原始问题中)只有两个actor,因此操作是同步的。如果系统中有多个actor,例如 Actor A消息Actor B消息Actor C再次消息Actor A ,则消息传递异步发生,因此必须等到所有操作完成。