2017-09-29 11 views
0

まず、Akkaアクターの単体テスト方法は問いません。私はそれを行う技術を知っています。私の問題は少し異なります。ユニットテストAkkaアクタを使用するコンポーネント

私はScalaプログラムを開発していますが、これはAkka Actorsを使用しないclientとしましょう。しかし、プログラムではライブラリを使用していますが、そのインタフェースはAkkaアクタを使用して実装されているserverとします。

質問パターンによって、clientserverと対話します。

// This is the client program 
class Client(uri: String) { 
    implicit val context: ActorSystem = ActorSystem("client-actor-system") 
    private val mainActor = context.actorSelection(uri) 

    def connect: Future[SomeClass] = { 
    implicit val timeout: Timeout = Timeout(5 seconds) 
    (mainActor ? Connect()).mapTo[CreationResponse] 
    } 
} 

ここで、Clientクラスの単体テストをいくつか書き留めたいと思います。単体テストとは、クラスを単独でテストすることです。すべての外部依存関係を嘲笑すべきです。

クラス内のmainActorへの参照をどのようにモックできますか?アクターシステムにmainActorのモックアクターを挿入するにはどうすればいいですか?

ありがとうございます。

答えて

2

mainActorアクターの選択をクライアントに挿入し、Akka TestKitsを使用してそれを作成します。

もちろん、ActorSelectionではなく、ActorRefが必要です。そのためのいくつかの解決策がここで見つけることができます:

Giving an ActorPath for a testProbe

または代わりに、あなたはActorSelectionIdentifyメッセージを送信することにより、mainActorActorRefを作ることができます。

+0

あなたのアプローチは、唯一正しいと思います。私が気に入らないのは、Akkaの使用がもうClientクラスに隠されていないということだけです。 –

+0

代わりに、あなたの俳優をビルドするファクトリメソッドを作成し、テストでそれをオーバーライドして 'probe.ref'を返します –

関連する問題