2012-01-25 10 views
6

は、私はPythonのようにのような単純なコードでユニットテストを使用しています:TestSuiteからTestCasesのリストを抽出するにはどうすればよいですか?

suite = unittest.TestSuite() 
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(module1)) 
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(module2)) 

しかし、私は彼らがスイートによって収集された後、各テストにいくつかのカスタムのことをやりたいと思っています。私はスイートにテストケースを反復処理するために、このような何かを考えていた:私はロードできるだけ多くのテストケースのために、

print suite.countTestCases() 
for test in suite:    # Also tried with suite.__iter__() 
    # Do something with test 
    print test.__class__ 

しかし、それは今まで

3 
<class 'unittest.suite.TestSuite'> 

は方法があります印刷しますスイートからTestCaseクラスのすべてのオブジェクトを取得できますか?これを容易にするためにテストケースをロードする必要がある別の方法がありますか?

答えて

5

スイートそのものです私はsuite._testsの要素の一部としてこの機能を使用する

for test in suite: 
    print test._tests 
+1

私はそれが欲しかったと思います。 _testsに気づきましたが、私は 'print suite.tests'のように呼びたいと思っていました。私はPythonでのノブである私にそれをチョークするだろうと思う。 – denaje

+0

私は行くつもりでしたが、受け入れる前に10分待たなければなりません。どうもありがとう! – denaje

1

をお試しください:

def list_of_tests_gen(s): 
    """ a generator of tests from a suite 

    """ 
    for test in s: 
    if unittest.suite._isnotsuite(test): 
     yield test 
    else: 
     for t in list_of_tests_gen(test): 
     yield t 
0

テストのリストを取得するきちんとした方法がnose2を使用することですコレクトプラグイン。

$ nose2 -s <testdir> -v --plugin nose2.plugins.collect --collect-only 
test_1 (test_test.TestClass1) 
Test Desc 1 ... ok 
test_2 (test_test.TestClass1) 
Test Desc 2 ... ok 
test_3 (test_test.TestClass1) 
Test Desc 3 ... ok 
test_2_1 (test_test.TestClass2) 
Test Desc 2_1 ... ok 
test_2_2 (test_test.TestClass2) 
Test Desc 2_2 ... ok 

---------------------------------------------------------------------- 
Ran 5 tests in 0.001s 

OK 

実際にはテストは実行されません。

あなたはnose2をインストールすることができます(そしてそれは、プラグインです)このように:

$ pip install nose2 

そしてもちろん、あなたは、例えばユニットテストを実行するためにnose2を使用することができますこれとかこのように:

# run tests from testfile.py 
$ nose2 -v -s . testfile 

# generate junit xml results: 
$ nose2 -v --plugin nose2.plugins.junitxml -X testfile --junit-xml 
$ mv nose2-junit.xml results_testfile.xml 
関連する問題