[英]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:/的DeadLetter / test / user] :: [akka:// test / user / $ b],ExistenceConfirmed = True,AddressTerminated = False>
您誤解了哪個演員是ExpectMsg()
的主題。 在ExpectMsg
上正在調用ExpectMsg
調用, TestActor
是TestKit
測試中所有消息的默認/隱式發送者。
因此,錯誤是因為您告訴TestKit
TestActor
應該期望使用ZipMessage
。 明確地說,是說TestActor
應該得到一個ZipMessage
。 並不是說ZipActor
應該收到該消息。 您要達到的超時是TestActor
應用於其ExpectMsg
調用的默認:03超時。
為了使測試通過,因為它的成立,現在,你需要Sender.Tell(new ZipMessage("foopath"))
從內部ZipActor
。
公平地說,目前缺少TestKit
的項目文檔(截至15年11月16日)。 我們現在正在編寫它們,應該在下周發布。
現在,我建議您檢查一下TestKit的詳盡介紹 (公開:我寫了它)。 我認為它將使您對TestKit
實際工作方式有一個非常扎實的理解。
好的,所以我在這里遇到了錯誤的情況,當我實際添加錯過的HandleZipMessage的結束行時,這很有意義。 我的測試實際上類似於此后的測試 - 使用TestKit測試Akka.NET的Context.Parent 。 因此,我需要做的是,該方法有效。 :)
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>();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.