0

私は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:/ /test/user]: : [akka://test/user/$b], ExistenceConfirmed=True, AddressTerminated=False>

4

2 に答える 2

2

どのアクターが の対象であるかを誤解していExpectMsg()ます。ExpectMsgコールは、テストのすべてのメッセージのデフォルト/暗黙の送信者である で呼び出されていますTestActorTestKit

したがって、エラーは、 がを期待する必要がTestKitあることを に伝えているためです。明確にするために、書かれているように、は を取得する必要があると言っています。がそのメッセージを受け取るべきだと言っているのではありません。ヒットしているタイムアウトは、呼び出しに適用されるデフォルトの :03 タイムアウトです。TestActorZipMessageTestActorZipMessageZipActorTestActorExpectMsg

現在の設定どおりにテストに合格するにはSender.Tell(new ZipMessage("foopath"))ZipActor.

公平を期すために、 のプロジェクト ドキュメントTestKitは現在ありません (2015 年 11 月 16 日現在)。私たちは今それらを書いている最中で、来週公開される予定です。

今のところ、この TestKit の完全なイントロを確認することをお勧めします(開示: 私が書きました)。TestKit実際の仕組みをしっかりと理解していただけると思います。

于 2015-11-17T01:32:12.573 に答える
0

OK、ここで棒の端が間違っていて、見逃していた HandleZipMessage の最後の行を実際に追加すると意味があります。私のテストは、実際にはこの投稿に似ています - Testing Akka.NET's Context.Parent with TestKit。だから私がする必要があったのはこれです。:)

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>();
    }
}
于 2015-11-17T12:45:43.287 に答える