Skip to Content
Pythonによるテスト駆動開発, 3rd Edition
book

Pythonによるテスト駆動開発, 3rd Edition

by Harry Percival
October 2025
Intermediate to advanced
712 pages
9h 46m
Japanese
O'Reilly Media, Inc.
Content preview from Pythonによるテスト駆動開発, 3rd Edition

ユーザー入力の保存 :データベースのテスト

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

これまで、入力ボックスを含む静的なHTMLページを返すところまでできた。 次に、ユーザがその入力ボックスに入力したテキストをサーバに送信し、何らかの方法で保存して後でユーザに表示できるようにしたい。

この章のコードを書き始めた時、 すぐに正しい設計だと思ったものに飛びつきたくなった。 リストとリスト項目用の複数のデータベーステーブル、 新規リストと項目の追加用URL群、 3つの新規ビュー関数、 そしてこれら全てのための単体テストを6つほど。 だが、私は自分を制した。 確かに、それらの問題を一度に処理できるだけの能力は 自分にあると確信していた。 だがTDDの点は、必要な時に一つずつ処理を進めることを可能にすることにある。 だから私は意図的に視野を狭め、 その瞬間に必要なことだけを行い、 機能テスト(FT)を少しずつ前進させることにした。

これはTDDがインクリメンタルかつ反復的な開発スタイルを いかに支えるかを示す実例となる——最速の道ではないかもしれないが、最終的には確実に到達できる。1副次的な利点として、 モデルやPOSTリクエストの処理、Djangoテンプレートタグといった新概念を 一度に詰め込むのではなく、一つずつ導入できる点がある。

これは先を見越して賢く考えるべきでないと言っているわけではない。 次の章では、もう少し設計と事前思考を取り入れ、 それがTDDとどう調和するかを示す。 だが今は、無心で突き進み、テストが指示する通りに実行しよう。

フォームをPOSTリクエスト送信用に接続する

前章の終わりで、 テストはユーザの入力を保存できていないと伝えていた:

  File "...goat-book/functional_tests.py", line 40, in
test_can_start_a_todo_list
[...]
AssertionError: False is not true : New to-do item did not appear in table

サーバに送信するため、当面は標準的なHTML POSTリクエストを使う。 少々退屈だが、確実に届けるには最適だ。本書の後半で様々なHTML5やJavaScriptを活用できる。

ブラウザにPOSTリクエストを送信させるには、次の2つの作業が必要だ:

  1. <input> 要素にname= 属性を付ける。

  2. これを<form> タグで囲む。2 method="POST"で囲む。

フロントエンドとバックエンドの連携テスト

前回の章で、ホームページテンプレートのコンテンツに関するスモークテストを再検証すると述べたことを覚えているだろうか。ユニットテストを簡単に見てみよう:

リスト/テスト.py

class HomePageTest(TestCase):
    def test_uses_home_template(self):
        response = self.client.get("/")
        self.assertTemplateUsed(response, "home.html")

    def test_renders_homepage_content(self):
        response = self.client.get("/")
        self.assertContains(response ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

イーサリアムをマスターする, 2nd Edition

イーサリアムをマスターする, 2nd Edition

Carlo Parisi, Alessandro Mazza, Niccolo Pozzolini, Gavin Wood, Andreas M. Antonopoulos
Excel用Python

Excel用Python

Felix Zumstein

Publisher Resources

ISBN: 0642572274771