Как создать TestActorRef внутри тестового класса. В частности, у меня есть следующий тест...
class MatchingEngineSpec extends TestKit(ActorSystem("Securities-Exchange"))
with FeatureSpecLike
with GivenWhenThen
with Matchers {
val google = Security("GOOG")
val ticker = Agent(Tick(google, None, None, None))
val marketRef = TestActorRef(new DoubleAuctionMarket(google, ticker) with BasicMatchingEngine)
val market = marketRef.underlyingActor
... когда я запускаю тесты, все проходит, но после закрытия ActorSystem я получаю эту длинную трассировку ошибки ...
[ERROR] [03/10/2015 15:07:55.571] [Securities-Exchange-akka.actor.default-dispatcher-4] [akka://Securities-Exchange/user/$$b] Could not instantiate Actor
Make sure Actor is NOT defined inside a class/trait,
if so put it outside the class/trait, f.e. in a companion object,
OR try to change: 'actorOf(Props[MyActor]' to 'actorOf(Props(new MyActor)'.
akka.actor.ActorInitializationException: exception during creation
Я наткнулся на это предыдущий вопрос, но принятый ответ в данном случае мне не помог.
Если это уместно, вот определение актера DoubleAuctionMarket
...
class DoubleAuctionMarket(val security: Security, val ticker: Agent[Tick]) extends Actor with ActorLogging {
this: MatchingEngine =>
...
DoubleAuctionMarket
актер? - person vptheron   schedule 10.03.2015BasicMatchingEngine
? Я не вижу ничего плохого в вашем коде и использовании вамиTestActorRef
. - person vptheron   schedule 10.03.2015this:MatchingEngine =>
) обычно зарезервировано для трейтов, чтобы убедиться, что они смешиваются только с определенными типами классов. Чего вы пытаетесь добиться с помощью этой настройки наDoubleAuctionMarket
? Выполнение этого в классе вынуждает вас выполнять динамическое микширование во время создания экземпляра, и я думаю, что это корень вашей проблемы. - person cmbaxter   schedule 10.03.2015MatchingEngines
дляDoubleAuctionMarkets
. Идея заключалась в том, чтобы упростить замену механизмов сопоставления «на лету», чтобы мне было легче сравнивать выходные данные моделей для различных механизмов сопоставления (и избегать создания нового классаDoubleAuctionMarket
для каждогоMatchingEngine.
. До сих пор я думал, что это элегантное использование самонабора... - person davidrpugh   schedule 10.03.2015new DoubleAuctionMarket(google, ticker) with BasicMatchingEngine
это миксин. Как отметил @cmbaxter, я думаю, что ограничение самонабора в вашем актере является проблемой. - person vptheron   schedule 10.03.2015