我正在用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的控制台输出中得到的内容。从akka://test/user到akka:// WARNINGThread /user::akka://test/user/$b,ExistenceConfirmed=True,AddressTerminated=False>
发布于 2015-11-17 12:45:43
好的,所以我在这里得到了错误的结果,当我实际上添加了HandleZipMessage的末尾时,这是有意义的,这是我错过的。我的测试实际上类似于这个后用Context.Parent测试Akka.NET的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-17 01:32:12
你误解了ExpectMsg()的主题是哪个演员。ExpectMsg调用是在TestActor上调用的,它是TestKit测试中所有消息的默认/隐式发送方。
因此,错误是因为您告诉TestKit,TestActor应该期望有一个ZipMessage。要明确的是,正如所写的那样,TestActor应该得到一个ZipMessage。这并不是说ZipActor应该得到这个信息。您所命中的超时是默认的:03超时,TestActor应用于它的ExpectMsg调用。
要使测试通过,就像现在设置的那样,您需要从Sender.Tell(new ZipMessage("foopath"))内部进行ZipActor。
公平地说,TestKit的项目文档目前已经丢失(截止到11/16/15)。我们现在正在写它们,它们应该在下周出版。
现在,我建议您查看这是对TestKit的全面介绍 (公开:是我写的)。我认为它将使您对TestKit的实际工作方式有一个非常扎实的理解。
https://stackoverflow.com/questions/33742842
复制相似问题