1

コンパイルされたコードが期待どおりの出力を返すか、期待どおりに失敗するかをどのようにテストしますか?

以下の実例を作成しましたが、簡単に拡張することはできません。追加のテストごとに、追加の入れ子括弧が必要になります。もちろん、これを他のファイルに分割することもできますが、これを改善する方法について何か提案はありますか?また、これをmakefileのmake testスタンザから使用することを計画しているので、テストのためだけに、デフォルトでインストールされていないものを他の人がインストールすることは期待していません。また、stdoutもstderrとインターリーブされたままにする必要があります。

簡略化した例:

./testFoo || echo execution failed

./testBar && echo expected failure

(./testBaz && (./testBaz 2>&1 | cmp -s - foo.tst && ( ./testFoo && echo and so on 
     || echo testFoo's execution failed )|| echo testBaz's does not match   )
  || echo testBaz's execution failed

私の現在のテスターは次のようになります(1つのテストの場合):

\#!/bin/bash
compiler1 $1 && (compiler2 -E --make $(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/') && (./$(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/') || echo execution failed)  || less $(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/').err) || echo compile failed
4

2 に答える 2

1

ここからパターンを探し始めることをお勧めします。たとえば、ファイル名をパターンとして使用してから、期待される結果をエンコードするいくつかの追加ファイルを作成できます。

次に、簡単なスクリプトを使用してコマンドを実行し、結果を確認できます(テストコードを何度も繰り返す代わりに)。

たとえばtestFoo.exec、コンテンツを含むファイルは、が含まれ0ている間は成功する(または少なくとも0で戻る)必要があることを意味しtestBar.execます1

textBaz.out次に、期待される出力が含まれます。testBazを数回呼び出す必要はありません。最初の呼び出しで出力をリダイレクトして$?から、呼び出しが成功したかどうかを確認できます。含まれている場合は、出力を直接確認できます(コマンドを再度開始する必要はありません)。

于 2009-08-17T15:42:35.953 に答える
0

私自身のシンプルなテストハーネスは次のように機能します。

  • すべてのテストは、拡張子が.testのbashスクリプトで表されます。これらはすべて同じディレクトリにあります。

  • テストを作成するときは、テストスクリプトを実行し、出力を注意深く調べます。見た目が良ければ、それを生成したテストと同じ名前のファイルで、good_resultsというディレクトリに移動します。

  • メインのテストスクリプトは、すべての.testスクリプトを検索し、それぞれを順番に実行して、一時的な出力ファイルを生成します。これは、good_resultsディレクトリ内の一致するファイルと比較され、相違点が報告されます

これを書いて動作させるのに約30分かかりましたが、非常に貴重であることがわかりました。

于 2009-08-17T15:58:50.057 に答える