Подтвердить что ты не робот

Тестирование актеров в Акке

Когда я запускаю базовый пример для тестирования участников:

class MySpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender
  with WordSpec with MustMatchers with BeforeAndAfterAll {

Я получил ошибку:

class WordSpec needs to be a trait to be mixed in

что я делаю неправильно?

4b9b3361

Ответ 1

В ScalaTest 2.0 вы можете найти как класс, так и свойство для WordSpec. Класс с именем WordSpec и признаком WordSpecLike. Поэтому просто используйте WordSpecLike вместо WordSpec:

class MySpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender
  with WordSpecLike with MustMatchers with BeforeAndAfterAll {

Ответ 2

В дополнение к тому, что предлагает 1еша, есть еще одно решение в akka documentation

Если по какой-то причине проблема наследовать от TestKit из-за того, что она является конкретным классом вместо признака, theres TestKitBase:

import akka.testkit.TestKitBase

class MyTest extends TestKitBase {
  implicit lazy val system = ActorSystem()

  // put your test code here ...

  shutdown(system)
}

Неявная система lazy val должна быть объявлена ​​точно так же (вы можете, конечно, передать аргументы в систему актера factory по мере необходимости), потому что Trat TestKitBase нуждается в системе во время ее построения.

Ответ 3

Как и в Scalatest 2.0, характеристики, которые вы смешиваете, теперь не являются чертами. Это означает, что вы не можете использовать их с набором тестов Akka... оба являются классами, и вы можете расширить только один из них.

Переключитесь в scalatest 1.9.1. Он по-прежнему поддерживается ими и является последней версией, выпущенной до того, как они сделали это изменение и сломали вещи для пользователей akka. В 1.9.1 спецификации все еще остаются чертами.