1

これが重複している場合は申し訳ありません。何を検索すればよいかわかりませんでした...

私のユース ケースはより複雑ですが、次の問題に絞り込むことができます。

たとえば、あらゆる種類のバイナリを呼び出す bash スクリプトを実行したい: grep. バイナリが正しい引数で呼び出されたと断言したい。これらのアサーションは自動テストの一部である必要があります。手動でチェックを開始したくありません。これはciサイクルに入る必要があります。

これを行う標準的な方法はありますか?

そうでない場合は、アサートしたいすべてのバイナリを移動し、最初に引数をログに記録してから元のバイナリを呼び出し、最後にそれ自体を削除して元のバイナリを返すスパイに置き換えることを考えました。

これは実現可能ですか?問題へのより良いアプローチはありますか?

4

1 に答える 1

0

ただのアイデア、私はこれをどこにも見ませんでしたが:

これらのバイナリを呼び出すためにフル パスを使用していない限り、これらのライブラリのモックを作成することができます (たとえば、プロジェクトbin/ディレクトリに作成し、そのディレクトリを$PATH.

export PATH="$PWD/bin:$PATH"

grepたとえば、をモックするには、次のようにします。

カウントをインクリメントするヘルパー実行可能ファイル:

#!/bin/bash
#Usage: increment FILE_WITH_A_NUMBER
touch "$1" #To create it if it doesn't exist
NTIMES=$(( $(cat "$1") + 1 ))
echo "$NTIMES" > "$1"

モック テンプレート (bin/grep 内):

#!/bin/bash

increment ${BASH_SOURCE[0]}.log    #=> bin/grep.log

#Possibly do some other stuff, such as log parameters

#Return a mocked result
echo "fake match"

#Or delegate to the real thing:
exec /usr/bin/grep "$@"
于 2015-06-16T10:45:36.917 に答える