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://test/user]: : [akka://test/user/$b], ExistenceConfirmed=True, AddressTerminated=False>
您误解了 ExpectMsg()
的主题是哪个演员。 ExpectMsg
呼叫正在 TestActor
上调用,TestActor
是 TestKit
测试中所有消息的 default/implicit 发件人。
所以错误是因为你告诉 TestKit
TestActor
应该期待 ZipMessage
。明确地说,如所写,是说 TestActor
应该得到 ZipMessage
。这并不是说 ZipActor
应该收到该消息。您遇到的超时是 TestActor
应用于其 ExpectMsg
调用的默认 :03 超时。
要使测试通过现在的设置,您需要从 ZipActor
.
内部 Sender.Tell(new ZipMessage("foopath"))
平心而论,TestKit
的项目文档目前缺失(截至 2015 年 11 月 16 日)。我们现在正在编写它们,它们应该会在下周发布。
现在我建议您查看 this thorough intro to the TestKit(披露:我写的)。我认为它会让您对 TestKit
的实际工作原理有一个非常扎实的理解。
好吧,所以我在这里弄错了,当我实际添加我错过的 HandleZipMessage 的结束行时,这是有道理的。我的测试实际上类似于此 post - 。所以我需要做的就是这个,它有效。 :)
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>();
}
}
我正在使用 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>
您误解了 ExpectMsg()
的主题是哪个演员。 ExpectMsg
呼叫正在 TestActor
上调用,TestActor
是 TestKit
测试中所有消息的 default/implicit 发件人。
所以错误是因为你告诉 TestKit
TestActor
应该期待 ZipMessage
。明确地说,如所写,是说 TestActor
应该得到 ZipMessage
。这并不是说 ZipActor
应该收到该消息。您遇到的超时是 TestActor
应用于其 ExpectMsg
调用的默认 :03 超时。
要使测试通过现在的设置,您需要从 ZipActor
.
Sender.Tell(new ZipMessage("foopath"))
平心而论,TestKit
的项目文档目前缺失(截至 2015 年 11 月 16 日)。我们现在正在编写它们,它们应该会在下周发布。
现在我建议您查看 this thorough intro to the TestKit(披露:我写的)。我认为它会让您对 TestKit
的实际工作原理有一个非常扎实的理解。
好吧,所以我在这里弄错了,当我实际添加我错过的 HandleZipMessage 的结束行时,这是有道理的。我的测试实际上类似于此 post -
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>();
}
}