まず、Akkaアクターの単体テスト方法は問いません。私はそれを行う技術を知っています。私の問題は少し異なります。ユニットテストAkkaアクタを使用するコンポーネント
私はScalaプログラムを開発していますが、これはAkka Actorsを使用しないclient
としましょう。しかし、プログラムではライブラリを使用していますが、そのインタフェースはAkkaアクタを使用して実装されているserver
とします。
質問パターンによって、client
はserver
と対話します。
// 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
のモックアクターを挿入するにはどうすればいいですか?
ありがとうございます。
あなたのアプローチは、唯一正しいと思います。私が気に入らないのは、Akkaの使用がもうClientクラスに隠されていないということだけです。 –
代わりに、あなたの俳優をビルドするファクトリメソッドを作成し、テストでそれをオーバーライドして 'probe.ref'を返します –