1

スプレー、Akka、および Scala を利用したアプリケーションがあります。現在の単体テストは Scala Test を介して行われています。アプリケーションは、Spray ルーティングを使用して Web リクエストの基本的なデータを特定および解析し、それをアクターに渡して必要なアクションを実行させます。スプレーでは、各アクターを構成および開始する、spray.servlet.Initializer から継承するカスタム初期化クラスを使用します。これらのアクションの一部は、7 つまたは 8 つの他の Web サービスを呼び出すことです。それぞれに、それぞれのサービスとの通信を処理するアクターがあります。そのため、通信を他のアクターに委譲するメイン アクターで一連のロジックを実行し、最後に自身の作業に加えて、返されたすべてのデータを処理します。

Scala Test と Akka Testkit を使用してシステム全体をテストし、Testkit を使用して、通信アクターを置き換えて適切なテスト データを返したいと考えています。

質問は 2 つの部分です。

  • テストへのより良いアプローチは何ですか? Scala Testkit を使用して、Spray Testkit 経由で Spray ルーティング サービスを介してリクエストを作成できます。別の方法は、メイン アクターがケース クラスを介してルーティング サービスの結果を取得するため、ルーティング サービスをスキップして、そのアクターにメッセージを直接渡すことです。どちらにもメリットがあります。ただし、Spray テストキットに関するドキュメントはほとんどありません。Spray.servlet.Initializer にアクターの初期化ロジックがある場合、Akka Testkit を介してアクターをどのようにサブスクライブしますか?

  • 2 つ目は、Akka Testkit を介してより複雑なアクター システムをセットアップする方法です。ドキュメントにはこれが可能であると記載されていますが、それを行う方法を正確に表現することはできません。ビジネスロジックの大部分である別のアクターと通信するアクターであるルーティングサービスがありますが、その後、他のいくつかのアクターと通信します。これらの通信アクターは、Akka Testkit のドキュメントに関して「子」アクターと見なされますか? リッチ Akka アクター システム全体をテストする際のベスト プラクティスを示すプロジェクトはありますか?

この場合の私の本能は、ルーティング システムをテストするために、スプレー テストキット ベースの一連のテストを用意することです。次に、データ ケース クラスをマスター アクターに送信し、その背後にモック化された通信アクターを配置して、マスター アクターから正しい応答が返されることを確認する一連のテストを行います。

4

1 に答える 1

1

私は通常、アプリケーションのレイヤーごとにテストを作成します。また、現在のレイヤーをテストしているときに、他のレイヤーをモックします。ビジネスをテストしている場合は、DAO をモックし、スプレー ルートをテストしている場合は、ビジネス オブジェクト (スプレー ルートで使用される) をモックします。アクターとスプレーを使用している場合、メイン プログラムの前に常にテストの作成を開始しようとしています。多くの場合、クラスをリファクタリングして使用するdependency injectionか、現在のクラス/特性で設定しないようにする必要がvalあるため、s をモックできvalます。

于 2016-04-13T03:12:18.547 に答える