问题标签 [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 回答
236 浏览

java - 使用 TestActorRef 创建的 AbstractPersistentActorWithAtLeastOnceDelivery 演员的 TestKit 单元测试失败

我正在尝试为我的一个演员编写单元测试,该演员使用 TestKit 从 AbstractPersistentActorWithAtLeastOnceDelivery 派生。我需要使用 TestActorRef.create(...) 创建一个演员,因为我需要获取一个基础演员才能将模拟注入演员的实现。

我的(简化的)演员

单元测试:

在调试器中,我看到 updateState() 中的 deliver() 方法被调用,但单元测试失败并出现错误:

断言失败:超时(3 秒),同时期待 1 条消息(得到 0)

我想知道是否可以使用 TestKit 来测试通过 TestActorRef 创建的演员,以及我的演员扩展 AbstractPersistentActorWithAtLeastOnceDelivery 的事实是否与测试失败有关

0 投票
1 回答
612 浏览

java - 在有限状态机中更新数据

我将 FSM 框架与 AKKA 一起使用,并使用其 Java API 来管理状态转换。这是状态机的相关部分

这按预期工作,并且正确的状态更改发生在参与者身上。在onTansition()块中,我想更新 Service 对象,在这种情况下是有限状态机数据,如下所示

这可能吗?我是否以正确的方式使用这个框架?

我想我能够做类似以下的事情

我现在如何实际测试由于此转换而更改的数据?

测试看起来像这样

0 投票
2 回答
1446 浏览

scala - 如何模拟 akka Actor 进行单元测试?

我想写一个单元测试来验证这个publish函数是否被调用

兔子控制演员!Message.topic(shipmentStatusUpdate, routingKey = "XXX")

只调用一次。我正在使用spingo将消息发布到 Rabbit MQ。我正在使用Playframework 2.6.x和 scala 2.12

0 投票
0 回答
397 浏览

scala - 在 akka-testkit 的帮助下测试延迟的消息

有两个演员 -ProducerActorConsumerActor。Producer 有一个调度器,"Tick"每个调度器都向自己发送消息2000 ms。之后生产者向"Hello"消费者发送消息:

当消费者参与者每个都收到“Hello”消息时,是否可以测试案例2000 ms?因此,如果在周期内收到消息,< 2000 ms或者> 2000 ms测试将断言错误。

例如:

--- UPD ---

我想出了以下对我来说很好的解决方案:

但是,如果这项任务有更好的解决方案,如果你能分享,那就太好了。

0 投票
3 回答
429 浏览

scala - 在将期货与参与者消息混合时确保测试中的消息顺序

我正在测试一个使用异步基于未来的 API 的演员。当 future 完成时,actor 使用管道模式向自己发送消息:

在我的测试中,我模拟了 API,所以我通过 Promise 控制未来的完成。但是,这与直接发送给参与者的其他消息交错:

现在我想知道在我的测试中如何保证actor在消息A和C之间接收和处理消息B,因为消息B实际上是在另一个线程中发送的,所以我无法控制actor邮箱接收的顺序消息。

我想了几个可能的解决方案:

  • 在每条消息后休眠几毫秒,以使另一个订单不太可能

  • 等待参与者确认每条消息,尽管确认仅在测试时需要

  • 将消息 B 直接发送给 actor 以模拟未来的完成,并编写一个单独的测试来确保正确使用管道模式(如果 actor 不将结果消息通过管道传递给自己,上面的测试不会失败)

我不太喜欢这两个选项中的任何一个,但我倾向于使用最后一个。还有另一种更好的方法可以在测试中强制执行特定的消息顺序吗?

澄清:问题不在于如何处理消息可能在生产中以随机顺序接收的事实。控制测试中的顺序对于确保参与者可以实际处理不同的消息顺序至关重要。

0 投票
1 回答
216 浏览

scala - 使用 testkit 对 akka 进行 gradle 测试

我有一个 Scala + Akka + Gradle 应用程序和以下测试:

和一个 gradlebuild.gradle依赖项:

当我运行时./gradle test,它说没有找到测试。有什么办法可以添加 TestKit 测试以对gradle test任务可见?

0 投票
2 回答
209 浏览

akka.net - 如何使用来自 testprobe 的参数化构造函数创建参与者

我正在尝试对 MyActor 进行测试,以便在有条件的情况下向自身发送 MessageB。MyActor 将设置作为构造函数参数。设置没有设置器,因为它在创建后是不可变的。

这是测试

我的问题是我不知道如何将布尔设置传递给构造函数。好吧,我可以这样写

这样 myActor 将设置设置。但是我没有使用 TestProbe,因此将无法收听预期的消息。所以我的问题是如何正确安排测试部分?

0 投票
1 回答
963 浏览

unit-testing - Akka 和 Java 8 TestKit 示例

Java 8 和 Akka 2.12:2.5.16 在这里。我正在尝试利用Akka TestKit编写我的第一个(有史以来)Akka 单元测试,并且正在努力应用我在网上找到的(极少数)示例中看到的原则。

我的演员:

非常非常简单。所以现在我只想编写一个单元测试来验证当Masteractor收到Init消息时,它是否将该消息转发给它的Childactor。迄今为止我最好的尝试:

当我运行它时,我得到:

有人可以帮我将TestKit实例连接到我的Master演员中,并帮助我弄清楚如何重构MasterTest以验证我想要完成的事情吗?提前致谢!

0 投票
1 回答
906 浏览

java - 带有退避和重试限制的演员重试

我需要在重试和最大重试限制之间增加时间的 akka 演员的重试机制。为此,我正在尝试使用 akka 提供的 BackOffSupervisor 模式。问题是,从我的测试来看,退避策略和重试限制似乎不起作用。或者问题出在测试中?

测试看起来像这样:

一个在前 5 条消息中抛出异常的简单 actor

}

BackOffSupervisor 配置

以及测试方法

测试结束太快了。在一秒钟内,从 BackoffSupervisor 的配置开始,我预计至少需要 50 多秒。

0 投票
2 回答
515 浏览

scala - Akka Http 测试 Gzip 响应

所以,我有一组用 scala 编写的 Akka Http 路由。看起来像这样

现在我想使用 scala-test 和 akka testkit 来测试它。

现在,我在路由中使用 gzip 对我的响应进行编码,当它试图转换为字符串时,测试变得乱码。结果测试没有通过。

有什么解决办法吗?提前致谢。