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

第22章 テスト フィクスチャと明示的な待機のためのデコレータ

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

認証システムが機能するようになったので、これを使ってユーザを識別し、彼らが作成したすべてのリストを表示したい。

そのためには、ログイン済みユーザを前提とするFTを書く必要がある。 各テストで(時間がかかる)ログインメールの手順を踏む代わりに、 その部分をスキップできるようにしたい。

これは関心の分離の問題だ。機能テストは単体テストとは異なり、 通常は単一の断言を持たない。 しかし概念的には、単一の事象をテストすべきだ。 全てのFTがログイン/ログアウト機構をテストする必要はない。 その部分を「ごまかす」方法を見つけられれば、 テストが重複したセットアップ手順を繰り返すのを待つ時間を減らせる。

ヒント

FTでの重複排除はやりすぎないこと。 FTの利点の一つは、 アプリケーションの異なる部分間の 奇妙で予測不可能なやり取りを 捕捉できることだ。

この短い章では、新しいFTの記述を始める。 これを機に、FT向けテストフィクスチャを用いた重複排除について説明する。 またPythonの便利なデコレータ構文を使い、明示的な待機処理のための便利なヘルパーをリファクタリングする。

セッション事前作成によるログインプロセス省略

ユーザがサイトに戻った時にクッキーが残っていることはよくある。 つまり「事前認証済み」の状態だ。 だからこれは全く非現実的な手抜きではない。 設定方法は以下の通りだ:

src/functional_tests/test_my_lists.py (ch22l001)

from django.conf import settings
from django.contrib.auth import BACKEND_SESSION_KEY, SESSION_KEY, get_user_model
from django.contrib.sessions.backends.db import SessionStore

from .base import FunctionalTest

User = get_user_model()


class MyListsTest(FunctionalTest):
    def create_pre_authenticated_session(self, email):
        user = User.objects.create(email=email)
        session = SessionStore()
        session[SESSION_KEY] = user.pk 1
        session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0]
        session.save()
        ## to set a cookie we need to first visit the domain.
        ## 404 pages load the quickest!
        self.browser.get(self.live_server_url + "/404_no_such_url/ ...
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