Akka.NET TestKit同步行为

时间:2015-05-14 01:50:44

标签: akka.net testkit

我有以下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.");
}

1 个答案:

答案 0 :(得分:0)

我见过的大多数AKKA.NET单元测试只使用了两个演员。显示示例的博客(在原始问题中)只有两个actor,因此操作是同步的。如果系统中有多个actor,例如 Actor A消息Actor B消息Actor C再次消息Actor A ,则消息传递异步发生,因此必须等到所有操作完成。