2017-01-17 6 views
0

実際に別のマシンにsshを実行してコマンドを実行するコードの単体テストを書きたいと思います。私はこの問題をどのように攻撃するかについて迷っています。別のマシンにsshsするメソッドの単体テストを書く方法?

コードは、基本的に、リモートマシン上でいくつかのコマンド(copygrepawk)を実行します。リモートマシンにアクセスすることなくテストを書く方法を教えてください。リモートマシン環境をどのようにエミュレートできますか?

考慮事項:
- 機械ユニットテストを実行するとsshコマンドを実行する必要があり、リモート・サーバーへのアクセス権を持っていないと仮定します。

答えて

0

実際には、接続の設定、タスクの実行、結果のテスト(受け入れテスト)のすべてのプロセスをテストしません。

私は2つの部分にそれを壊すことをお勧め:

  1. あなたが接続して、あなたが実行したいコマンドを作ることを期待前半。ここでは、接続を確立するためのメソッドが期待する正しい出力を持つことをテストするだけです。たとえば、connectの呼び出しが正しいシェルコマンド文字列を定式化することをテストする場合と同様です。

  2. 第二の部分は、をシミュレートすることであるgrepを実行してからの応答(例えば)。これは、他のマシンがあなたに送り返すコードを渡し、コードがその特定の応答で期待することを確実にするためのコードです。別の例は、これがどのようである

(明らかに私はあなたのアプリケーションが何であるか見当がつかない、それは単なる例です)あなたが応答として2017-1-17 The missiles launchedを得るとき、あなたはあなたのコードは、日付と状態を保存したことをテストすることができそれを行うだろうが、私は他の人が1つの巨大なテストで完全なスタックをテストする方法の良い例を与えるだろうと確信しています。自分のやり方が少し安定してモジュール化されているので、将来的にテストを追加しやすくなります。

+0

実行コマンドはすべてメソッドの一部です(例:public void runCmd();)。その場合はどうすればよいですか? 他のすべてのメソッドはプライベートです。 – thestudent

+0

懸念を分ける必要があるようです。あなたが行っていること(接続、スクリプトの実行、レスポンスの解析など)が1つのクラスに存在する場合は、クラスをいくつかのクラスに分割してそれぞれが責任を負うことを検討する必要があります。あなたは、個々の部品や動作をテストすることができます。 – Luke

0

あなたは、少なくとも次のオプションがあります。

  1. は、いくつかの異なる方法にあなたの方法を分割(接続および実行)と作るローカル

  2. 「を実行」の部分をテストするテストは、準備されたドッキングウィンドウを起動しますコンテナを開き、コマンドを実行してからurlでパラメータを指定します。テスト後に、ドッカーコンテナを停止/削除する必要があります。

関連する問題