Skip to content

テストの実行方法と書き方

tadataku-lab edited this page Nov 7, 2018 · 2 revisions

テストの実行方法

  • すべてのテストを実行

python setup.py test

tests/test_all.pyで定義されているsuite()が呼び出されて追加されているテストが全て実行されます.


  • ファイルごとにテストを実行

python -m unittest tests.test_<hoge>

tests/test_<hoge>.pyのファイルのテストをすべて実行します.

例:python -m unittest tests.test_gpeg


  • メソッドごとにテストする

python -m unittest tests.test_<hoge>.Test_<Fuga>.test_<piyo>

tests/test_<hoge>.pyのファイルのTest_<Fuga>クラスのtest_<piyo>メソッドのテストを実行します.

例:python -m unittest tests.test_gpeg.Test_GPEG.test_math


  • 詳しいテスト内容を見る

python -m unittest -v tests.<hogehoge>

-v オプションをつけることでどんなテストを実行したか詳しく表示します.

例: python -m unittest -v tests.test_gpeg


その他のunittestの機能についてはコチラ

テストの書き方

テストはtests/に書きます. ファイル名はtest_<hoge>.pyが分かりやすいかと思います.

import unittest # unittest
import tests # __init__.pyを読んでexTestが使えるようになる
from pegpy.gparser.gnez import * 
from pathlib import Path

#unittest.TestCaseを継承して宣言
class TestGPEG(unittest.TestCase):
    # unittestではtest_<fuga>のメソッド名が実行対象のメソッドになる
    def test_math(self):
        g = Grammar("math")
        g.load('math.tpeg')
        #構文木のテストをしたい場合はloadした後に追加すれば良い
        g.example('Expression,Int', '123', "[#Int '123']")
        g.example('Expression', '1+2*3', "[#Infix left=[#Int '1'] name=[# '+'] right=[#Infix left=[#Int '2'] name=[# '*'] right=[#Int '3']]]")
        # Grammarに含まれるexampleをすべて実行する
        self.exTest(g, gnez)

test_all.pytests/のすべてのテストを実行するためのファイルです.

import unittest
from test_gpeg import TestGPEG
from test_npeg import TestNPEG

def suite():
  suite = unittest.TestSuite()
  suite.addTests(unittest.makeSuite(TestGPEG))
  suite.addTests(unittest.makeSuite(TestNPEG))
  #ここにテストを追加しましょう
  return suite

python -m setup.py testで追加されているテストが走ります. テストが完成したら追加しておきましょう.