Я делаю веб-приложение с Scala
и Akka
актерами, и у меня возникают проблемы с tests
.Unit Testing Актеры AKKA
В моем случае мне нужно попробовать актера, который разговаривает с Базой данных. Для выполнения модульного тестирования я хотел бы использовать Fake Database, но я не могу заменить новый с помощью моего целевого поддельного объекта.
Давайте посмотрим код:
Class MyActor extends Actor {
val database = new Database()
def receive = { ... }
}
А в тестах я хотел бы, чтобы ввести объект FakeDatabase вместо базы данных. Я искал в Интернете, но лучшее, что я нашел, это:
- Добавить параметр в конструктор.
- Преобразование базы данных
val
вvar
, поэтому в тесте я мог получить доступ к атрибуту по базовому слову и заменить его.
Оба решения решают проблему, но очень загрязнены.
Не лучший способ решить эту проблему?
Спасибо!
Я бы не назвал «добавление параметра в конструктор» грязным. Если вы думаете о семантике: может ли действующая функция без БД? Наверное, нет, поэтому конструктор - это очень хорошее место для него, потому что вы явно заявляете, что для создания актера ему нужна база данных. –
Я не эксперт, но в вашем тесте вы можете переопределить базу данных следующим образом: new MyActor {override val database = new FakeDatabase} – user24601
Я думаю, что он может работать, и это самое простое решение.Спасибо – mtrebi