2017-02-20 5 views
13

私は私のために私のすべてのテストを自動的に行うためのpythonスクリプトを書いて、HTMLレポートを生成します。先日unittestsのためにdiscoverを発見しました。特定のディレクトリに明示的に名前を付けずにすべてのunittestを実行できるようになりました。私は実際に各モジュールを明示的にインポートするのではなく、doctestを同じ方法で実行できるようにしたいと思います。doctestとunittestのテストディスカバリを統合するにはどうしたらいいですか?

私はhttps://docs.python.org/2/library/doctest.htmlでこれを行う方法についていくつかの情報を見つけましたが、本当にそれを取得しませんでした。 Doctestsにdiscoverを使用して私を助けてください。

Python test discovery with doctests, coverage and parallelismは関連していますが、まだ私の質問には答えていません。

coverage_module

import coverage 
import doctest 
import unittest 
import os 

# import test_module 
import my_module 

cov = coverage.Coverage() 
cov.start() 

# running doctest by explicity naming the module 
doctest.testmod(my_module) 

# running unittests by just specifying the folder to look into 
testLoad = unittest.TestLoader() 
testSuite = testLoad.discover(start_dir=os.getcwd()) 
runner = unittest.TextTestRunner() 
runner.run(testSuite) 

cov.stop() 
cov.save() 
cov.html_report() 
print "tests completed" 

test_moduleは

import unittest 
import doctest 

from my_module import My_Class 


class My_Class_Tests(unittest.TestCase): 
    def setUp(self): 
     # setup variables 

    def test_1(self): 
     # test code 

# The bit that should load up the doctests? What's loader, tests, and ignore though? 
# Is this in the right place? 
def load_tests(loader, tests, ignore): 
    tests.addTests(doctest.DocTestSuite(module_with_doctests)) 
    return tests 

if __name__ == '__main__': 
    unittest.main() 
+5

pytestは最近のPythonテストではエタロンと見なされていますので、私はcoverage_moduleを作成する必要はありません。それをチェックすることをお勧めします。それはdoctestsのための素晴らしいサポートを持っているように見えます:http://doc.pytest.org/ja/latest/doctest.html – yedpodtrzitko

答えて

4

1)unittest.discovery

そこに何が起こっているかを把握できます

doctestは別のフレームワークなので、doctestsの手掛かりはありません。 したがって、unittestはすぐにDoctestを検出するはずです。あなたが手で一緒に

2それらを接着する必要があります意味 )doctestの

それはユニットテストのようなテストケースへのdoctestを変換するために、いくつかの糊付けのクラスを持っているが、それは本質的に独立したフレームワークです。それはだ - https://docs.python.org/2.7/library/doctest.html#doctest.DocTestSuite

3)

は、あなたが何を意味するかdiscover得ることはありませんでした、私がいない場合、それは

python -m unittest discover 

だと仮定して、およそhttps://pypi.python.org/pypi/discoverを話しているそしてちょうどそれを忘れ発見します以前のバージョンのPython用バックポート

4)対処方法

ここでもhttps://docs.python.org/2.7/library/doctest.html#unittest-apiまたはコード一つの場所にあなたが持っているすべてのモジュールを収集し、DocTestSuiteに変換する方法を説明するように、コード全体でload_testsフックをたくさん散乱し、[S] https://docs.python.org/2.7/library/doctest.html#doctest.DocTestSuite

しかし、正直なところどちらのアプローチ

$ py.test --doctest-modules 

または

$ nosetests --with-doctest 
:それはつまるところとして、今日どんな意味がありますもちろん coverageと多くの鈴&ホイッスルもこれらのフレームワークによって提供されており、あなたはunittestに固執し続けるかもしれません。TestCaseを作成する必要はありません。
関連する問題