5

テストしたいコマンドラインツールを作成しました(コマンドラインから単体テストを実行するつもりはありません)。特定の入力オプションのセットを特定の出力にマップしたいと考えています。このための既存のツールを見つけることができませんでした。アプリケーションは単なるバイナリであり、任意の言語で記述できますが、POSIX オプションを受け入れ、標準出力に書き込みます。

次のようなもの:

  • 入力オプションの既知のセットごとに:
    1. 指定された入力でアプリケーションを起動します。
    2. 出力をファイルにパイプします。
    3. 出力を保存された (目的の) 出力と比較します。
    4. diff が空でない場合は、エラーを記録します。

(ちなみに、これは単体テストではなく統合テストと呼ばれるものですか?)

編集:このために独自のツールを作成する方法を知っています。コードの助けは必要ありません。私が学びたいのは、これがすでに行われている場合です。

4

5 に答える 5

6

DejaGnuは、CLIプログラムのテストスイートを作成するための成熟した、やや標準的なフレームワークです。

このチュートリアルから取得したサンプルテストは次のとおりです。

# send a string to the running program being tested:
send "echo Hello world!\n"

# inspect the output and determine whether the test passes or fails:
expect {
    -re "Hello world.*$prompt $" {
        pass "Echo test"
    }
    -re "$prompt $" {
        fail "Echo test"
    }
    timeout {
        fail "(timeout) Echo test"
    }
}

このような確立されたフレームワークを使用することは、ニーズが非常に単純でない限り、長期的には自分で思いつくものよりも優れているでしょう。

于 2013-02-15T22:27:19.333 に答える
4

BATS (Bash Automated Testing System) を探しています: https://github.com/bats-core/bats-core

ドキュメントから:

example.bats contains
#!/usr/bin/env bats

@test "addition using bc" {
  result="$(echo 2+2 | bc)"
  [ "$result" -eq 4 ]
}  

@test "addition using dc" {
  result="$(echo 2 2+p | dc)"
  [ "$result" -eq 4 ]
}


$ bats example.bats

 ✓ addition using bc
 ✓ addition using dc

2 tests, 0 failures

于 2015-12-29T01:50:14.980 に答える
0

ええと、すべての言語には外部プロセスを実行する方法が必要だと思います。

C# では、次のようなことができます。

var p = new Process();
p.StartInfo = new ProcessStartInfo(@"C:\file-to-execute.exe");
... //You can set parameters here, etc.
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;
p.Start();

//To read the standard output:
var output = p.StandardOutput.ReadToEnd();

標準入力に書き込む必要はありませんでしたが、アクセスすることでもできると思いますp.StandardInput。アイデアは、両方の入力をオブジェクトとして扱うStreamことです。

Python にはsubprocessモジュールがあります。そのドキュメントによると:

subprocess モジュールを使用すると、新しいプロセスを生成し、入力/出力/エラー パイプに接続して、リターン コードを取得できます。

数か月前に書いたコンパイラのコード生成部分の単体テストを書くときも、同じことをしなければなりませんでした:コンパイラで単体テストを書く (IL を生成する)

于 2013-02-01T10:30:37.693 に答える
-3

確かに、それは文字通り何千回も行われてきました。しかし、あなたが提案するような単純なシェル スクリプトやバッチ ファイルを実行するツールを作成するのは簡単な作業であり、一般的なツールに変えようとする価値はほとんどありません。

于 2013-02-03T16:44:13.557 に答える