1

テスト クラス内で 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 =>
  ...
4

1 に答える 1

1

コンパニオン オブジェクトを使用して、明示的に渡さずに構成を MyActor に挿入していたため、同じ問題が発生しました。

object MyActor {
  def apply(): MyActor = new MyActor(MyActorConfig.default)
  val props = Props(new MyActor(MyActorConfig.default))
}

次に、次のことができます。

val myActorRef = system.actorOf(MyActor.props, "actorName")

このエラーは、次のテストで引数を明示的に渡すことに関連しています。

TestActorRef(new DoubleAuctionMarket(google, ticker))

with BasicMatchingEnginevptheronが言ったように、コンストラクターを使用して、他に何も混ぜずに削除しようとします。十分でない場合は、引数の少ないアクターでも試してください。

次のものだけに問題がないため、問題を解決する必要があります。

TestActorRef(new DoubleAuctionMarket(google, ticker))
于 2016-04-29T18:09:08.850 に答える