首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Akka.NET TestKit获取超时错误

Akka.NET TestKit获取超时错误
EN

Stack Overflow用户
提问于 2015-11-16 19:14:34
回答 2查看 868关注 0票数 0

我正在用NUnit进行测试。我做错了什么?

代码语言:javascript
复制
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的控制台输出中得到的内容。从akka://test/user到akka:// WARNINGThread /user::akka://test/user/$b,ExistenceConfirmed=True,AddressTerminated=False>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-17 12:45:43

好的,所以我在这里得到了错误的结果,当我实际上添加了HandleZipMessage的末尾时,这是有意义的,这是我错过的。我的测试实际上类似于这个后用Context.Parent测试Akka.NET的TestKit。所以我需要做的是这个,这是可行的。:)

代码语言:javascript
复制
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>();
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-11-17 01:32:12

你误解了ExpectMsg()的主题是哪个演员。ExpectMsg调用是在TestActor上调用的,它是TestKit测试中所有消息的默认/隐式发送方。

因此,错误是因为您告诉TestKitTestActor应该期望有一个ZipMessage。要明确的是,正如所写的那样,TestActor应该得到一个ZipMessage。这并不是说ZipActor应该得到这个信息。您所命中的超时是默认的:03超时,TestActor应用于它的ExpectMsg调用。

要使测试通过,就像现在设置的那样,您需要从Sender.Tell(new ZipMessage("foopath"))内部进行ZipActor

公平地说,TestKit的项目文档目前已经丢失(截止到11/16/15)。我们现在正在写它们,它们应该在下周出版。

现在,我建议您查看这是对TestKit的全面介绍 (公开:是我写的)。我认为它将使您对TestKit的实际工作方式有一个非常扎实的理解。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33742842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档