0

AKKA.NET アクターの動作をテストする次の C# コードがあります。ステートメントproductActor.Tell(new ChangeActiveStatus(true));はブロッキング呼び出しであると予想されます (TestKit はこのブログに従って同期呼び出しを行います) が、すぐに返されます。その結果、ActiveStatus は後で変更されますが、2 番目のテストは失敗します。

[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.");
}
4

1 に答える 1