我正在使用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>
答案 0 :(得分:2)
你误解了哪个演员是ExpectMsg()
的主题。正在ExpectMsg
上调用TestActor
调用,TestKit
是TestKit
测试中所有消息的默认/隐式发件人。
所以错误是因为您告诉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>();
}
}