ファイルパスを入力とし、長時間の処理後に出力を標準出力に書き出す外部プロセスを起動するソフトウェアをテストドライブする方法を理解しようとしていますファイル?この種の状況でテストを書く上で、いくつかの共通のパターンがありますか?テストで実際のツールを起動したり、結果を調べたりせずに、外部ツールの正しい使用状況を確認できる高速実行テストを作成するのは難しいです。外部コマンドラインツールを使用するソフトウェアをテストドライブする方法
答えて
外部プロセスをメモすることができます(http://en.wikipedia.org/wiki/Memoization)。 Rubyに入力ファイルのmd5の合計を計算し、それを既知のチェックサムのデータベースと照合するラッパーを記述します。一致する場合は、正しい出力をコピーします。それ以外の場合は、ツールを正常に呼び出します。
外部プログラムが十分にテストされていると仮定して、プログラムが正しいデータを渡しているかどうかをテストするだけです。
ツール自体からそのデータの結果を得ることなく、データが正しいことを確かめるのは難しいです。問題のツールを使用して同じ入力に対して結果が常に同じになるため、最初の実際の実行後にどのデータが渡されているかを確認するだけで十分です。 – JtR
あなたの境界までテストしてください。あなたの場合、境界は外部プログラムを呼び出すために構築するコマンドラインです(これは猿のパッチ適用で取得できます)。そのプログラムの標準出力に自分自身を貼り付ける場合(またはファイルを読み込んでその結果を処理する場合)は別の境界です。テストは、あなたのプログラムがその "入力"を処理できるかどうかです。
ユニットテストでよくある問題は、統合がうまくいくかどうかによって正確性が決まると思います。単体テストはどのように役立ちますか?
基本的な答えは、ユニットテストでは、コマンドラインツールに渡す予定のパラメータが実際に渡されていることをテストし、戻ってくると思われる結果が実際に処理する方法で処理されるということですそれら。
次に、実際のユーティリティが呼び出される機能レベルにある自動化されていてもいなくてもかまいません(可能であれば実用的かどうかに依存します)。あなたが渡そうとしているものと戻ってくるものが実際に何が起こっているのかを見ることができます。
仮説を確定する外部ツール(おそらく別のスケジュールで実行される、またはそれらのツールをアップグレードするときのみ)を「テストする」一連のテストには何も問題はありません。生の出力を取り戻すと主張します。そうすれば、ツールをアップグレードすると、あなたに影響を与える可能性のある動作の変更をキャッチすることができます。
これらのテストの最後のセットが価値あるものかどうかを判断する必要があります。それは非常に多くのツールに依存します。
90%のケースでは、外部コマンドラインツールを擬似して、正しい入力が2つのインターフェイス間の分割インターフェイスでそれらに渡されていることを確認します。これは、テストスイートを高速に保つのに役立ちます。また、「テスト中のコード」ではないため、コマンドラインツールを使用する必要はありません。コードの変更やコマンドの動作の変更によってユニットテストが失敗する可能性がありますラインユーティリティ。
しかし、あなたは「正しい入力」を定義するのに問題があるようです。この場合、Memoization(Daveの示唆)のような最適化を使用すると、両方の世界の利点が得られるかもしれません。
- 1. ソフトウェアでJavaを使用してソフトウェアを表示する方法
- 2. ubuntuのPerlコマンドラインツールでpdflib TETを使用する方法
- 3. EFで共有する外部キーを使用する方法
- 4. Javaコード内から外部ソフトウェアのGUIを処理する方法
- 5. 外部キーを使用してオブジェクトを選択する方法
- 6. pythreejsを使用して外部ジオメトリをインポートする方法
- 7. 外部キーを使用してデータベースを作成する方法
- 8. コマンドラインツールをサンドボックスにする方法は?
- 9. コマンドラインツールをそのまま使用する
- 10. AS2の外部swfからSharedObjectを使用する方法
- 11. フラグメント内で外部ライブラリを使用する方法は?
- 12. ブラックベリー・エクリプス・プラグインで外部jarファイルを使用する方法
- 13. BIRTレポートで外部フォントファミリを使用する方法は?
- 14. alfresco Maven Projectで外部AMPを使用する方法
- 15. リアクションネイティブ縮小/アコーディオンで外部ソースデータを使用する方法
- 16. TYPO3:外部データベースでExtbaseを使用する方法
- 17. Djangoテンプレートの外部キーオブジェクトでget_absolute_url()を使用する方法
- 18. 外部の.d.tsをモジュールに使用する方法
- 19. Dictionary <>をLinqと外部で使用する方法は?
- 20. 外部のapplication.propertiesファイルを使用する方法SpringバッチCommandLineJobRunner
- 21. 外部JavaScriptライブラリをtypescriptで使用する方法 - 角度4
- 22. gem doc_ripperを外部リンクで使用する方法
- 23. ミドルウェア/ルータの外部でapp.locals変数を使用する方法
- 24. jqueryの外部関数を使用する方法document.ready
- 25. Ruby in Railsで外部APIを使用する方法
- 26. 外部のボタンフレーズ内で変数を使用する方法は?
- 27. FTPファイルに外部ファイルを使用する方法
- 28. ノードJS、外部varにhttp.request POSTを使用する方法?
- 29. 外部jspファイルをオーバーレイとして使用する方法
- 30. React Nativeビューで外部Webページを使用する方法
興味深いアプローチ.. – JtR
+1素敵な最適化のトリック。 – Gishu