Python : unittest のスクリプトにコマンドラインオプションを追加したい

テストスクリプトの先頭に以下のコードを追加

def nop(*msgs):
    pass
def printer(*msgs):
    for m in msgs:
        print m, ‘ ‘,
    if len(msgs) >0:
        print
notice=nop
original_checker = unittest.main.parseArgs
def optchecker(self,argv):
    global notice
    import getopt
    argvn = argv[:]
    if ‘-n’ in argvn:
        notice = printer
        argvn = [i for i in argvn if i != ‘-n’ ]
    return  original_checker(self,argvn)
unittest.main.parseArgs = optchecker

ケースにコードを追加

class FetchRequestTest(unittest.TestCase):
def test_construct(self):
    notice ( "requested_attributes", self.msg.requested_attributes)
    notice ( "update_url",self.msg.update_url)
    self.failUnlessEqual({}, self.msg.requested_attributes)
    self.failUnlessEqual(None, self.msg.update_url)

-nで実行するとメッセージがでる

(ax)hdknr@debuniid:~/.virtualenvs/ax/src/ax2$ python test_ax.py -n FetchRequestTest.test_construct
requested_attributes   {}
update_url   None
.
———————————————————————-
Ran 1 test in 0.001s

OK

-n をはずすと。

(ax)hdknr@debuniid:~/.virtualenvs/ax/src/ax2$ python test_ax.py  FetchRequestTest.test_construct
.
———————————————————————-
Ran 1 test in 0.001s

OK

-n 以外はデフォルトのオプション動作

(ax)hdknr@debuniid:~/.virtualenvs/ax/src/ax2$ python test_ax.py -g FetchRequestTest.test_construct
option -g not recognized
Usage: test_ax.py [options] [test] […]

Options:
  -h, –help       Show this message
  -v, –verbose    Verbose output
  -q, –quiet      Minimal output

Examples:
  test_ax.py                               – run default set of tests
  test_ax.py MyTestSuite                   – run suite ‘MyTestSuite’
  test_ax.py MyTestCase.testSomething      – run MyTestCase.testSomething
  test_ax.py MyTestCase                    – run all ‘test*’ test methods
                                               in MyTestCase

もっと本質的なやり方があるのかもしれないが、とりあえず。

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中