问题标签 [akka-testkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
347 浏览

scala - 使用 Akka TestProbe 进行喷涂路线测试

在我的 Spray 路线中,我委托一个 actor 来处理请求。将RequestContext在消息中发送给该参与者。

在我的测试中,我用 aTestProbe代替了 actor,因为 actor 的处理成本很高。

此规范失败,因为没有status. TestProbe 什么都不做,因此ctx从未响应。

该行status mustEqual StatusCodes.Success对我的测试并不重要,但我无法删除它,因为那时规范无法编译 - 该方法不再类型检查为MatchResult.

如何测试委托给演员的路线?

0 投票
1 回答
5218 浏览

scala - 如何测试向另一个 Actor 发送消息的 Akka Actor?

我正在使用带有 Akka TestKit 的 ScalaTest 来为我编写的演员编写单元和集成测试,以便在不改变任何内部状态的情况下简单地向另一个演员发送消息。以此为例:

我想编写一个测试来确认由于anotherActor处理AnotherMessageMyActor处理MyMessage。经典示例是用于TestActorRef获取底层参与者并检查一些在收到消息时应该受到影响的内部状态,如下所示:

但就我而言,我不在乎这种状态。事实上,我想避免持有任何这样的状态。TestProbe也不是我想要的,因为您仍然需要向TestProbe.ref被测演员注册。在大多数情况下,我查看了 Akka 测试文档 ( http://doc.akka.io/docs/akka/snapshot/scala/testing.html ) 中的所有示例,但没有找到任何合适的。

0 投票
1 回答
1394 浏览

akka - 如果发送了预期的消息,Akka 的 TestProbe expectMsg 将匹配

我对特定演员进行了测试。这个actor依赖于其他一些actor,所以我用来TestProbe()单独测试。我的问题是,我收到更多消息,然后我有兴趣在这个非常特殊的测试中进行测试。例如:

测试失败,因为在创建 MyActor 时,它会向构造函数中传递的消息发送某种“注册”消息。

消息3最终到达,但断言失败——这不是第一个到达的消息。我想避免断言比测试所需更多的消息 - 这些消息可能会改变,等等,无论如何它不是特定测试的范围。

由于TestProbe不包含此类方法 - 我怀疑我的测试设置(或者更确切地说是我的项目架构)可能有问题。我看到有很多方法,fishForMessage但所有这些方法都需要一个明确的时间参数,这似乎无关紧要,因为我的整个测试是纯粹同步的。

有没有什么方法可以完成这样的测试,希望的消息只是在所有收到的消息中?如果没有,如何改进我的设置以易于测试?

0 投票
2 回答
1115 浏览

java - 在 Akka 中对私有方法进行单元测试

我是akka的新手,我正在java上尝试akka。我想了解演员内部业务逻辑的单元测试。我阅读了文档,演员中孤立的业务逻辑的唯一例子是:

虽然这很简单,但这意味着我要测试的方法是公开的。但是,考虑到参与者应该只通过消息进行通信,我的理解是没有理由拥有公共方法,所以我将我的方法设为私有。如下例所示:

所以要测试方法parse我要么:

  1. 需要它使包私有
  2. 或者测试演员的公共接口,即下一个演员LogWriter从我的演员那里收到正确的解析消息LogRowParser

我的问题:

  1. 选项#1 有什么缺点吗?假设参与者仅通过消息进行通信,封装和干净的开放接口就不那么重要了吗?
  2. 如果我尝试使用选项#2,有没有办法在下游测试中捕获从参与者发送的消息(测试LogRowParser和捕获LogWriter)?我查看了各种示例,JavaTestKit但所有示例都捕获了返回给发件人的响应消息,并且没有一个显示如何拦截发送给新参与者的消息。
  3. 我还有其他选择吗?

谢谢!

UPD: 忘了提到我还考虑了以下选项:

  • 将逻辑从actors中完全移到辅助类中。akka 是常见的做法吗?
  • Powermock ......但如果可以重新设计,我会尽量避免它
0 投票
0 回答
251 浏览

scala - 如何在 scala.testkit.eventfilter 中拦截来自不同 ActorSystem 的日志?

我有一个 Scala 类ComponentBuilder,它处理创建演员和初始化他们。它有一个system对应于ActorSystem(除其他外)的字段。

现在,我想使用TestKit- 拦截参与者生成的日志并检查它们来测试它。如果我尝试使用常规EventFilter,我可以看到我的演员在标准输出中产生的日志,但EventFilter没有捕捉到它们,我猜是因为它们在不同的ActorSystem.

我想到的一个解决方案是创建ComponentBuilder一个子类ActorSystem并将所有AS-commands 传递给它的字段。由于返回的受保护方法,我没有设法做到这一点InternalActorRef,但无论如何我不确定它是否会起作用,因为无论如何都会有2个演员系统。

我还尝试将一些消息从测试类传递给演员,然后等待并检查结果。这导致回复deadLetters,可能出于相同的原因 - 内部ActorSystem不知道外部的。

我将不胜感激您可能拥有的任何解决方案。

0 投票
1 回答
399 浏览

scala - 死信的 Akka 测试

如何在测试时对 Akka 中的死信作出断言?我有一个演员可以切换行为(使用become)并处理使用单独的调度程序调度的一些期货。在某些特定情况下,它应该简单地拒绝其他消息。那些正确地去死信,但我想尝试为他们断言(或缺乏)。我怎样才能做到这一点?

0 投票
1 回答
448 浏览

scala - TestActorRef 中的 context.parent 值是什么?

我在 Scala/Akka 有一个小测试

它产生的输出是

为什么演员内部不是我们在日志中看到context.parent的真正的父母?testActor1(这是我希望在创建主题时成为父母的演员)。

如果这种物质状态是预期的——如果是这样,为什么?我认为这种方法没有任何好处。

0 投票
1 回答
168 浏览

scala - 播放 - Akka:演员测试

我读过 Akka 提供的 TestKit、TestActorRef 和 ImplicitSender。但是我没有找到一种方法来检查某个演员是否收到了某个消息。我认为如果接收者执行“发送者!Foo”,“expectMsg(Foo)”会很有用。但我的应用程序不同:我有一个演员 A 向另一个演员 B 发送消息。比 B 通过 WebSocket 向 Java 客户端发送消息。当 B 收到回复时,它会转发给参与者 C。如何检查 C 是否收到了该消息(可能在某个超时内)?谢谢。

0 投票
1 回答
1989 浏览

scala - 测试参与者:恰好收到 N 条消息

我正在使用 Akka 演员测试一个应用程序。我正在使用测试探针。我想验证探针是否接收到 10 条相同类型的消息。一种解决方案可能是写 10 次:

但我更喜欢更通用的解决方案(例如,我也会针对 n=100 测试我的应用程序)。我也试过 probe.receiveN(10, 20 seconds) 但如果我收到超过 10 个元素,测试不会失败。相反,我希望它在这种情况下失败。有解决办法吗?

0 投票
1 回答
480 浏览

scala - 如何使用 ScalaTest 在 Akka Actor 中使用外部调用进行模拟

我是整个生态系统的新手,包括Scala,AkkaScalaTest

我正在解决我Actor调用外部系统的问题。

LogReaderDisruptor main(Array())是一个Java可以做很多其他事情的类。

我目前的测试看起来像

UnitTestSpec看起来像哪里(并从这里获得灵感)

问题

  • 如何模拟调用LogReaderDisruptor main(Array())并验证它是否被调用?

我来自Java, JUnit,Mockito土地,我会在这里做的事情是

我不确定如何在这里用 ScalaTest 翻译它。

另外,这段代码可能不是惯用的,因为我很新并且正在学习