私は約6週間Pythonを学ぼうとしています。このサイトで TDD についてたくさん読んだ後、Roy Osherove によるThe Art of Unit Testing (すばらしい本です!) を購入して、Python を学びながら TDD を試してみました。この本は .NET を使用していますが、問題はないようです。スタブはスタブであり、モックはモックです。
TDD の例をオンラインで読んだり見たりしているうちに、コーダーがコードを書いた理由が理解できたような気がします。しかし、座って自分自身を試すとすぐに、どこにも行きません。
昨日の例を挙げましょう。
それほど複雑ではないプロジェクトで TDD を試してみたかったのです。基本的に、私が欲しいのは、RSS フィードをダウンロードして解析することにより、(name, date) を含むタプルのリストを保持するクラスです。テスト用に新しい py ファイルを作成し (「実際のコード」はまだ作成していません)、テスト ケースを作成しました。
import unittest
from tv_schedule import TvSchedule
class TvScheduleTests(unittest.TestCase):
def test_download_success_and_parse_failure(self):
'''Successfully download RSS schedule for the specific user
but fail parsing it'''
self.tv = TvSchedule("User123")
# Check if ParserException was thrown I guess
if __name__ == "__main__":
unittest.main()
...そして、私はちょっと立ち往生しています。と思います(笑)。これが単にばかげているかどうか、および/またはこれをより適切に行う方法について、いくつかの指針が本当に必要です。私の直感は、私が何か悪いことをしたと言っています。
TvSchedule クラスに ( feedparserを使用して) バックグラウンドでダウンロード/解析を実行させたいので、クラスの新しいインスタンスを作成してから使用するだけです。たぶんこれは悪い設計であり、テストも難しくなっていますか? また、ネットワーク経由で rss フィードを取得することへの依存をどのように削除しますか? それをスタブ化して、常にサンプル フィードを含むメモリ内文字列を返すことによって?
TDD のチュートリアルや書籍でよく使われている非常に単純な電卓の例を離れるとすぐに、行き詰ってしまいます。:(