Akka.NET TestKit收到超时错误

时间:2015-11-16 19:14:35

标签: c# akka.net akka-testkit

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

null

我收到此错误:

失败:在等待CloudBackupActors.Messages.ZipMessage类型的消息时超时00:00:03

这是我在NUnit' sconsole输出中得到的。 收到:ZipMessage的一些路径 [警告] [16/11/2015 18:46:37] [Thread 0012] [akka:// test / user]从[akka:// test / user]到[akka:// test / user]的DeadLetter: :[akka:// test / user / $ b],ExistenceConfirmed = True,AddressTerminated = False>

2 个答案:

答案 0 :(得分:2)

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

所以错误是因为您告诉TestActor ZipMessage应该期待TestActor。要清楚,正如所写的那样,ZipMessage应该得到ZipActor。并不是说TestActor应该得到那条消息。您正在达到的超时是ExpectMsg适用于其Sender.Tell(new ZipMessage("foopath"))呼叫的默认:03超时。

要立即设置测试,您需要ZipActor内的TestKit

在公平的情况下,TestKit的项目文档目前缺失(截至2015年11月16日)。我们现在正在编写它们,它们应该在下周发布。

现在我建议您查看this thorough intro to the TestKit(披露:我写了)。我认为它会让你非常了解//Iterate from 2 until n/2 (inclusive) and divide n by each number. //Return numbers that are factors (i.e. remainder = 0). Add the number itself in the end. int[] findAllFactors(int number) { int[] factors = IntStream.range(1, 1 + number / 2).filter(factor -> number % factor == 0).toArray(); int[] allFactors = new int[factors.length+1]; System.arraycopy(factors,0,allFactors,0,factors.length); allFactors[factors.length] = number; return allFactors; } 实际上是如何运作的。

答案 1 :(得分:0)

好的,所以我在这里得到了错误的结尾,当我实际添加我错过的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>();
    }
}