nikkie-ftnextの日記

イベントレポートや読書メモを発信

#pyconapac2023 トーク「練習してテストを書けるようになるんだ」extra | unittestのおすすめリンク集

はじめに

解夏傀儡、お疲れさまでした!ゲーム自体はTwitterアカウントほど不気味じゃなくてよかった... nikkieです。

今週末はPyCon APAC 2023、現在トーク準備の真っ只中です。

今回は15分(英語で)テストが書けるようになるための知見を発表するのですが、話したいこと全部は15分には収まりきりません!
そこで、extraコンテンツとしてエントリにします。
今回は(本編では一切触れない)unittestのおすすめリンク篇です1

目次

ドキュメント

unittest

unittestは標準ライブラリにあります。
インストール不要で使えるテストライブラリですね。

ユニットテストフレームワーク

unittest.mock

unittestはモックも提供しています2
unittest.mock --- モックオブジェクトライブラリ — Python 3.12.0 ドキュメント

モックの使い方については、こちらの入門ドキュメントが分かりやすいです。

書籍

Python実践入門』🤗

いろんな書籍で扱われていますが、私のイチ推しは『Python実践入門』!

第12章 ユニットテスト

後述しますが、著者の陶山さんはPyCon JPでunittestの発表もされています。

『最短距離でゼロからしっかり学ぶ Python入門』

入門書ですが、テストコードまでカバーしています。

第11章 コードをテストする

この章に限らず、この書籍自体 分かりやすいです!(丁寧な分、分厚くもなっています)3

Python実践レシピ』

Python実践レシピ』でもunittestやunittest.mockが扱われていますね。

16.2 ユニットテストフレームワークを利用する―unittest
16.3 モックを利用してユニットテストを行う―unittest.mock

Python書籍は豊富にあるので、ここで挙げた以外にもよいものはあると思います(オススメがあったら教えてほしいなァ)

発表資料

PyLadies Tokyo Meetup #29 テストをまなぼう (2018)

PyLadies Tokyo Meetup #29 テストをまなぼう - connpass

私がunittestを初めて触ったのは、この資料がきっかけでした。
とても感謝している資料です。

テストについてほとんど知識もないまま、見よう見まねでunittestを使ったテストコードを書きましたね。
今思えば過去の私はハードモードを選択したなという気がします

「unittestで始めるユニットテスト入門」(PyCon JP 2019)

Python実践入門』の陶山さんによる発表。
https://pycon.jp/2019/schedule/?sessionId=213

この資料は何回も見返しています。
特に私に影響を与えたのが以下です

  • テストパッケージの作成
  • mockとpatch

書籍を読んでもいいですが、unittestについて1時間くらいで知りたい場合は陶山さんの発表を見る(もしくはスライドを追う)のがいいんじゃないかと思っています。

「unittest.mockを使って単体テストを書こう 〜より効率的で安定したテストに〜」(PyCon JP 2020)

もう1つPyCon JPから。
https://pycon.jp/2020/timetable/?id=203572

unittest.mockにフォーカスした発表です。

発表者のみずきさん(id:mizzsugar)は非常に精力的に発表準備をされていました。
たしかpyhackの夏山合宿で練習もされていて、レビューコメントを取り込んでどんどん完成度があがっていったのを横目で見てめちゃめちゃ刺激を受けています。
一例ですが「datetime.datetime.nowをモックできない」ですね。
https://speakerdeck.com/mizzsugar/unittest-dot-mockwoshi-tutetesutowoshu-kou?slide=73

テストコードの例

unittestの実装を扱った、私の一番新しいエントリはこちら

unittestでテスト駆動開発をしていた時期が長いので、私のGitHubリポジトリには他にも例がありますね。

終わりに

PyCon APAC 2023のトークでは時間の制約により盛り込めないunittestについて、extraコンテンツとしてオススメ情報ソースを書き出しました。
unittestを知りたい・学びたい方の一助となれば幸いです。

トキメキの地🌈有明で、僕と握手!


  1. 15分も可の30分トークで応募していて15分枠採択だったので、unittestはトークからは割愛となりました
  2. モックはトークで触れます
  3. レビュアーとして名前が載っていると思います