Skip to Content
テスト駆動開発を学ぶ
book

テスト駆動開発を学ぶ

by Saleem Siddiqui
May 2025
Intermediate to advanced
280 pages
3h 35m
Japanese
O'Reilly Media, Inc.
Content preview from テスト駆動開発を学ぶ

第7章. Pythonのモジュール

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

モジュールは、Pythonの定義とステートメントを含むファイルである。

Pythonチュートリアル

この章では、Pythonコードの組織化を改善するためにいくつかのことを行う。 モジュールを使ってテストコードと本番コードを分離する。Python のスコープとインポートの規則が、コードの依存関係が正しいことを保証するのに役立っていることを確認する。最後に、コードから冗長性のあるテストを削除して、コンパクトで意味のあるものにする。

コードをモジュールに分ける

MoneyPortfolio のプロダクション・コードとテスト・コードが同じファイル内にある。このコードを個別のソース・ファイルに分ける必要がある。

まず、test_money.py と同じフォルダに、money.pyportfolio.py という名前のファイルを作成しよう。フォルダ構造は以下のようになる:

py
├── money.py
├── portfolio.py
└── test_money.py

MoneyPortfolio クラスのコードを、それぞれmoney.pyportfolio.py に移す。このコード・セグメントは、このコード再配置後のportfolio.py の完全な内容を示している:

import functools
import operator

class Portfolio:
    def __init__(self):
        self.moneys = []

    def add(self, *moneys):
        self.moneys.extend(moneys)

    def evaluate(self, currency):
        total = functools.reduce(operator.add,
                                 map(lambda m: m.amount, self.moneys), 0)
        return Money(total, currency)

クラスのコードと一緒に、2つのimportPortfolioなぜなら、Portfoliofunctoolsoperator を使っているからである。

ここには示していないが、money.py というファイルにも同様に、Money クラスとそのメソッドが含まれている。

今テストを実行すると、古くからの友人であるNameError

  File "/Users/saleemsiddiqui/code/github/saleem/tdd-project/py/test_money.py",
          line 22, in testAddition
    fiveDollars = Money(5, "USD")
NameError: name 'Money' is not defined

テスト・クラスはMoneyPortfolio の両方に依存しているので、test_money.py の先頭にimport の文を追加する:

from money import Money
from portfolio import Portfolio

Portfolio 内からNameError: name 'Money' is not defined を取得できるようになった!portfolio.py を見てみると、Money にも依存していることがわかる。そこで、

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

はじめての知識グラフ構築ガイド

はじめての知識グラフ構築ガイド

Jesus Barrasa, Jim Webber
エンジニアが学ぶ会計システムの「知識」と「技術」

エンジニアが学ぶ会計システムの「知識」と「技術」

広川 敬祐, 五島 伸二, 小田 恭彦, 大塚 晃, 川勝 健司
ユーザーストーリーマッピング

ユーザーストーリーマッピング

Jeff Patton, 川口 恭伸, 長尾 高弘
初めてのGraphQL ―Webサービスを作って学ぶ新世代API

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

Eve Porcello, Alex Banks, 尾崎 沙耶, あんどうやすし

Publisher Resources

ISBN: 9798341650992