16

私は最近、私のプロジェクト用に単純なtcp-clientを作成する機会を与えられましたが、tcp / ipについての私の大きな無知のために、それを正しく機能させるのに苦労しています。

TCPサーバーがダウンしているために接続が拒否された場合、または受信を呼び出すときに例外が発生する場合があるため、奇妙な接続の問題が発生することがあります。

tcp-serverはブラックボックスであり、アクセスできないため、この状況で、このための単体テストを作成するための最良の方法は何でしょうか。

私は、tcp-serverを作成して、実際のサーバーに期待するものとして特定の入力を返すようにするか、理想的な状況データを返すことに関連する関数をモックする必要があると考えています。

時々奇妙な接続/受信の問題が発生する可能性があるという事実が好きではありません。以前に機能していたものがすべて機能していることを確認するために、将来再利用/拡張できる単体テストを適切に作成する方法を知りたいです。私のコードまたはそのコードが変更された場合に備えて。

ありがとう

4

2 に答える 2

17

2種類のテストが必要です。

  1. 統合テスト-接続を送受信できる実際のベアボーンTCPサーバーを使用します。最低限の機能を備えたこのサーバーを作成し、それを使用してクライアントの動作をテストします。単純なTCPサーバーを使用して、クライアントがメッセージを送受信する方法、およびクライアントがサーバーに接続および切断する方法をテストできます。もう1つの便利なテストは、複数のクライアントがどのように接続してサーバーにメッセージを送信するかです。
  2. 単体テスト-モックを使用すると、より複雑なシナリオをテストできます。メッセージを送受信することはできませんが、クライアントの内部ロジックをテストすることはできます。2つのメッセージが到着した場合の動作、エラーが発生した場合の再送信などです。

両方の種類のテストを使用すると、クライアントの機能のほとんどをカバーできるはずです

于 2011-11-10T07:18:34.207 に答える
2

単体テストでは、クライアントをテストするためだけに、単純なソケットサーバー(UTの起動時に起動)を作成します。シンプルでスタンドアロンにすると、テストを実行する手間が減ります。ncatなどのツールを使用してこれを容易にすることもできます。

しかし、UTが理解するのが難しいかもしれない問題があるかもしれないと言った。キープアライブの問題、おそらくルーティングなどの外部の問題。ただし、(接続をモックするのではなく)実際のリスニングソケットを使用する場合、それは実際のTCPです。

于 2011-11-08T04:11:26.243 に答える