Python ユニットテスト生成

怠け者だけがテストを書く必要性についてまだ書いていない。 しかし、正直に言って、テストを書くのはつまらないものです。 特にレガシーコードの場合。 何百もの繰り返しの均一な線。 退屈 これで何ができますか?



画像

注目を集めるための写真。 美しいパイソンですか? (写真:PawełStefaniak)



聴診器



幸いなことに、私たちはプログラマです。人々は怠zyで、5分間で1時間のタスクを解決するために数週間を殺す準備ができています。 そのため、Yandexでの数分間のグーグル検索で、不幸な同僚とテストの作成を容易にする興味深いソリューションが見つかりました。



Pythoscopeをインストールします。



sudo pip install Pythoscope
      
      







ご注意
残念ながら、安定版ブランチにはユニコードの問題があります。 テスト目的では機能しますが、実際のアプリケーションでは安定して機能するため、dev-branchを使用することをお勧めします。



 sudo apt-get install bzr bzr branch lp:pythoscope cd pythoscope/ python setup.py install
      
      











テスト猫



画像



猫をテストするには、まず猫が必要です。 書きましょう:

 # cat.py class Cat(object): def __init__(self, name='Tom'): self.name = name def eat(self, food): if food == 'fish': return 'Yummy!' else: return 'Ugh!'
      
      







cat.pyのあるフォルダーに移動し、Pythoscopeを初期化します。



 pythoscope --init
      
      







このコマンドは、Pythoscopeに関連するすべての情報が保存される.pythoscopeフォルダーを作成します。 そして今、最後に、テスト自体の生成:



 pythoscope cat.py
      
      







これで、ネストされたcat_test.pyを持つtestsフォルダーができました。 その中で...ほとんど何も:



 # tests/cat_test.py import unittest class TestCat(unittest.TestCase): def test___init__(self): # cat = Cat(name) assert False # TODO: implement your test here def test_eat(self): # cat = Cat(name) # self.assertEqual(expected, cat.eat(food)) assert False # TODO: implement your test here if __name__ == '__main__': unittest.main()
      
      







厚い? まあ、少なくとも今はテストを書くときに時間を節約するフレームワークがあります。

結局のところ、魔法はありません-テスト自体は書かれません。 しかし、すべてが失われるわけではありません。Pythoscopeがテストのために何を実行するかを理解するのに役立ちます。 このために、いわゆる「エントリポイント」を実現できます。これは、コードのユースケースの使用例です。



koteのエントリポイントを書きましょう。



 # .pythoscope/points-of-entry/eat_fish_poe.py from cat import Cat Cat().eat('fish')
      
      







テスト生成を再度実行します。

 pythoscope cat.py
      
      







今では、実際に何かをテストするメソッドがテストクラスに追加されました。

 # tests/cat_test.py ... def test_eat_returns_Yummy_for_fish_after_creation_with_Tom(self): cat = Cat('Tom') self.assertEqual('Yummy!', cat.eat('fish')) ...
      
      







しかし、魚にコテを入れないとどうなりますか? エラー? これを確認する必要があります。

 # .pythoscope/points-of-entry/eat_tomato_poe.py from cat import Cat Cat().eat('tomato')
      
      







以下を生成します。



 pythoscope cat.py
      
      







さて、残っているのはチェックすることだけです:



 nosetests .. ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK
      
      







いいね! 成功した簡単なテスト!



All Articles