簡體   English   中英

Akka.NET TestKit收到超時錯誤

[英]Akka.NET TestKit getting timeout error

我正在用NUnit進行測試。 我究竟做錯了什么?

public class ZipActor : ReceiveActor
{
    public ZipActor()
    {
        Receive<ZipMessage>(message => HandleZipMessage(message));
    }

    private void HandleZipMessage(ZipMessage message)
    {
        Console.WriteLine(string.Format("Received: {0} for {1}", typeof(ZipMessage).Name, message.SourceFolderPath));
    }
}

public class ZipMessage
{
    public readonly string SourceFolderPath;

    public ZipMessage(string sourceFolderPath)
    {
        SourceFolderPath = sourceFolderPath;
    }
}

[TestFixture]
public class ZipActorTests : TestKit
{
    [Test]
    public void ZipActor_WhenSentZipMessage_ShouldReceiveZipMessage()
    {
        var actor = Sys.ActorOf(Props.Create(() => new ZipActor()));
        string path = "some path";

        actor.Tell(new ZipMessage(path));

        ExpectMsg<ZipMessage>();
    }
}

我收到此錯誤:

失敗:等待CloudBackupActors.Messages.ZipMessage類型的消息時超時00:00:03

這就是我在NUnit的控制台輸出中得到的。 收到:ZipMessage的某些路徑[警告] [16/11/2015 18:46:37] [線程0012] [akka:// test / user]從[akka:// test / user]到[akka:/的DeadLetter / test / user] :: [akka:// test / user / $ b],ExistenceConfirmed = True,AddressTerminated = False>

您誤解了哪個演員是ExpectMsg()的主題。 ExpectMsg上正在調用ExpectMsg調用, TestActorTestKit測試中所有消息的默認/隱式發送者。

因此,錯誤是因為您告訴TestKit TestActor應該期望使用ZipMessage 明確地說,是說TestActor應該得到一個ZipMessage 並不是說ZipActor應該收到該消息。 您要達到的超時是TestActor應用於其ExpectMsg調用的默認:03超時。

為了使測試通過,因為它的成立,現在,你需要Sender.Tell(new ZipMessage("foopath"))從內部ZipActor

公平地說,目前缺少TestKit的項目文檔(截至15年11月16日)。 我們現在正在編寫它們,應該在下周發布。

現在,我建議您檢查一下TestKit的詳盡介紹 (公開:我寫了它)。 我認為它將使您對TestKit實際工作方式有一個非常扎實的理解。

好的,所以我在這里遇到了錯誤的情況,當我實際添加錯過的HandleZipMessage的結束行時,這很有意義。 我的測試實際上類似於此后的測試 - 使用TestKit測試Akka.NET的Context.Parent 因此,我需要做的是,該方法有效。 :)

public class ZipActor : ReceiveActor
{
    public ZipActor()
    {
        Receive<ZipMessage>(message => HandleZipMessage(message));
    }

    private void HandleZipMessage(ZipMessage message)
    {
        Console.WriteLine(string.Format("Received: {0} for {1}", typeof(ZipMessage).Name, message.SourceFolderPath));
        // TODO: Zip operations
        Context.Parent.Tell(new IncrementFolderCountMessage());
    }
}

public class ZipMessage
{
    public readonly string SourceFolderPath;

    public ZipMessage(string sourceFolderPath)
    {
        SourceFolderPath = sourceFolderPath;
    }
}

[TestFixture]
public class ZipActorTests : TestKit
{
    [Test]
    public void ZipActor_WhenReceivedZip_ShouldIncrementFolderCount()
    {
        // Arrange
        // (make ZipActor child of TestActor)
        var props = Props.Create(() => new ZipActor());
        var actor = ActorOfAsTestActorRef<ZipActor>(props, TestActor);

        string path = "some path";

        // Act
        actor.Tell(new ZipMessage(path));

        // Assert
        ExpectMsg<IncrementFolderCountMessage>();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM