测试Akka actor时检查日志消息是否缺失

时间:2018-11-27 23:26:06

标签: java akka

TestKit测试Akka演员时,https://doc.akka.io/docs/akka/2.5/testing.html显示如何验证给定消息的记录。

有没有办法检查是否缺少消息?

我让我的角色设置为在接收到未处理的消息时调用一种方法来记录诸如“收到了意外消息”之类的方法。在我的测试中,我想验证该消息是否从未记录过,即使该测试似乎成功了也是如此。有办法吗?

我正在使用Akka 2.5和Java 10。

2 个答案:

答案 0 :(得分:2)

这取决于您的实现。您可以做以下两件事之一:

1)创建一个TestKit探针,并使其订阅系统的eventStream

yourActorSystemInTheTest.eventStream()。subscribe(yourProbe.getRef(),UnhandledMessage.class);

然后在最后检查一下,以您的情况为0,探测收到了多少消息。请使用许多“期望...”方法之一。

2)文档告诉您如何检查日志消息,因此只需断言获得“收到意外消息”的次数为0。

同样,根据您演员的实施情况,以上操作可能无效。

祝你好运!

答案 1 :(得分:0)

要提供一些细节,这是我需要做的:

import akka.event.Logging;
import akka.testkit.javadsl.EventFilter;
import akka.testkit.javadsl.TestKit;
...

@Test
public void noUnhandledTest() {

  new TestKit(system) {{
    new EventFilter(Logging.Warning.class, system).
       occurrences(0).
       matches("unhandled event").
       intercept(() -> {
         try {
           <actual test code>

           // Intercept needs a supplier
           return 0;
         } catch (Exception e) {
           // Suppliers can't throw
           throw new RuntimeException(e);
         }
       });
  }};
}

src/test/resources/application.conf中:

akka.loggers = [akka.testkit.TestEventListener ]