7

コマンドライン引数を受け入れるモジュールのユニットテストを書いています。モジュールで optparse を使用して引数を受け入れました。

したがって、モジュールを直接実行するときは、次のように入力します。

module.py -e 42 -g 84

これまでのところ、ユニットテストでは、テストするモジュールのインスタンスを作成してから、特定のメソッドを呼び出すだけです:-

instance = module.className()
instance.method()

コマンドライン引数を unittest などの別のモジュールから module.py に渡す方法を教えてください。

ユニットテストで optparse を使用し、module.py のインスタンスを生成するときに何らかの方法で組み込みますか?

前もって感謝します。

4

2 に答える 2

7

sys.argvコマンドライン引数のリストを表すリストを変更するだけです。このリストは Python インタープリターに対してグローバルであるため、渡す必要はありません。

import sys
from optparse import OptionParser

parser = OptionParser()
parser.add_option("-e")
parser.add_option("-g")

print sys.argv # unmodified
(options, args) = parser.parse_args()
print (options, args)

sys.argv = ['module.py','-e','42','-g','84'] # define your commandline arguments here

(options, args) = parser.parse_args()
print (options, args)

注: OptionParser モジュールは推奨されていないため、可能であれば切り替えてargparseください ( http://docs.python.org/library/argparse.html#module-argparseを参照)。必要なのは Python 2.7 だけです。

于 2012-04-12T23:58:18.893 に答える
1

3 つの選択肢:

1) 100% Python に固執する代わりに、いくつかのシェルを使用します。

2) 必要に応じて sys.argv (およびおそらく似たようなベクトル) を渡します。

3) コマンド ライン オプション ディスパッチャーが代わりに呼び出す関数を呼び出します。

于 2012-04-12T22:56:05.623 に答える