文脈にもよると思いますが、私は最初の選択肢を好みます。ここに私のランダムな考えがあります:
私は、自分のテストができるだけユース ケース (BDD スタイル) に密接にマッピングされることを好みます (ユース ケースという用語を誤用しているという免責事項があります)。これらの使用例は、複数のアプリケーションとサブシステムにまたがる場合があります。
例:バック オフィスの管理者は、パブリック インターフェイスからユーザーが行ったトランザクションを表示できます。
ここで、バック オフィス管理インターフェイスとパブリック インターフェイスは異なるアプリケーションですが、同じユース ケースに含まれています。
これらの考えを、さまざまなホストに展開されたサブシステムがある問題に当てはめると、ユーザー/アクターの観点から、それがどのように使用されるかに依存すると言えます。ユースケースは複数のサブシステムにまたがっていますか?
また、おそらく、システムが複数のホストにデプロイされているという事実は、テストにとって重要ではありません。テストでプロセス間通信をメソッド呼び出しに置き換え、テスト中にシステム全体を同じプロセス内に配置して、複雑さを軽減できます。プロセス間通信のみを検証するテストでこれを補足します。
編集:
システム全体をテストすることを好む理由を含めるのを忘れていたことに気付きました。
資産は機能、つまり動作ですが、コードは負債です。したがって、コードではなく動作をテストする必要があります (BDD スタイル)。
各サブシステムを個別にテストしている場合は、機能ではなくコードをテストしています。なんで?システムをサブシステムに分割したとき、いくつかの技術的な理由に基づいて分割しました。さらに学習すると、選択したシームが最適ではなく、あるサブシステムから別のサブシステムに責任を移したいと思うかもしれません。また、テスト コードと本番コードを同時に変更する必要があり、セーフティ ネットがなくなります。これは、実装の詳細をテストする際の典型的な症状です。
とはいえ、この種のテストは単純すぎるため、すべてをテストすることはできません。したがって、必要に応じて、詳細についても補完的なテストを行う必要があります。