2011-12-13 9 views
5

私は、さまざまな引数を取ることができるドライバスクリプトを介してすべてのモジュールが呼び出されます。テスト自体はpython unittestモジュールを使って書かれています。テストモジュールへのPythonスクリプト引数の受け渡し

import optparse 
import unittest 
import sys 
import os 

from tests import testvalidator 
from tests import testmodifier 
from tests import testimporter 

#modify the path so that the test modules under /tests have access to the project root 
sys.path.insert(0, os.path.dirname(__file__)) 

def run(verbosity): 
    if verbosity == "0": 
      sys.stdout = open(os.devnull, 'w') 

    test_suite = unittest.TestSuite() 
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testvalidator.TestValidator)) 
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testmodifier.TestModifier)) 
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testimporter.TestDataImporter)) 

    unittest.TextTestRunner(verbosity=int(verbosity)).run(test_suite) 

if __name__ == "__main__": 

    #a simple way to control output verbosity 
    parser = optparse.OptionParser() 
    parser.add_option("--verbosity", "--verbosity", dest="verbosity", default="0") 
    (options, args) = parser.parse_args() 

    run(options.verbosity) 

私の問題は、これらのテストモジュール内では、私は私が運転手に渡された別のパラメータに基づいてスキップしたい特定のテストを持っている、ということです。私はunittestがこれを行うデコレータのファミリを提供していることを知っていますが、この情報を個々のモジュールに渡す最善の方法はわかりません。たとえば、--skip-slow引数があった場合、どうすればテストにゆっくりと注釈を付けることができますか?

ありがとうございます。

+0

解決策が見つかった可能性があります。私の答えをチェックしてください。 –

答えて

2

私は実際に自分自身を不思議に思っていましたが、最終的に解決策を見つけました。

メインファイル...

... 
if __name__ == '__main__': 
    args = argparser() 

    from tests import * 

    ... 

そして、あなたのテストモジュールでは、単に実行します。

from __main__ import args 

print args 

私はこれをテストし、それがうまく働いていたといいます。素敵なことはそれがいかにシンプルで、それはあまりにも多くのハッキングではありません。

1

noseテストランナーには、属性に基づいてテストケースを選択できるattribプラグインを使用できます。特に、プラグインのドキュメントの例では、遅いテストケースをマークするのに@attr(slow)を使用しています。コマンドラインからその後

、すべてのテストケースを選択するには

  • slowとしてマーク:

    $ nosetests -a slow

  • slowとしてマークされていないすべてのテストケースを選択するには:

    $ nosetests -a '!slow'

+0

私はおそらくunittestがこれまでではないかもしれないので、自分自身に鼻を熟知する必要があります。私は、依存関係を追加する必要がないという希望を抱いていました。 – zchtodd

+1

あなたは 'unittest.skipIf' /' unittest.skipUnless'とスキップデコレータがチェックする条件で使われるいくつかの環境変数に基づいて 'attr'デコレータを作成することができますが、それは努力する価値があるとは言いませんあなたはすでに箱から出てきたものを持っています。 – jcollado

関連する問題