第7章 自動テスト 自動テスト
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
自動テストを書くことは、平均的な開発者と世界最高の開発者を分けるもののひとつだ。 このスキルをマスターすれば、これまでよりはるかに複雑で強力なソフトウェアを書けるようになる。それは、あなたのキャリアの弧を変える超能力なのだ。
皆さんの中には、どの言語であれ、自動テストを書いた経験がほとんどない、あるいはまったくない人もいるだろう。この章は、主にそのような人たちのために書かれている。テスト自動化の多くの基本的な考え方を紹介し、テスト自動化が解決すべき問題を説明し、そのための Python のツールの適用方法を教える。
他の言語の標準的なテストフレームワーク(Java の JUnit や PHP の PHPUnit など)を使った経験が豊富な人もいるだろう。一般的に言えば、他の言語で xUnit フレームワークを使いこなし、Python に堪能であれば、Python のunittest モジュールドキュメントをざっと読み始めることができるだろう。1
をざっと読み始めることができるかもしれない。Python のテストライブラリunittest は、ほとんどの xUnit ライブラリがどのように動作するかと密接にマッピングされている。2
もしあなたが経験豊富なら、少なくともこの章をざっと読み、おそらくは徹底的に勉強する価値はあると思う。一般化したソフトウェアテスト、そして Python に特化したソフトウェアテストに役立つ、現実的な知恵を織り込んだ。これには、Pythonのテストコードの組織化、メンテナンス可能なテストコードの書き方、サブテストのような便利な機能、さらにはプログラミングの認知的な側面...テスト駆動開発を通じて楽しく生産性の高い「フロー」状態になるようなトピックも含まれる。
それを念頭に置いて、自動テストを書くための核となる考え方から始めよう。そして、それらのアイデアをPythonに特化して適用していく。
テスト駆動開発とは何か?
自動テストとは、別のプログラムをテストするプログラミングのことである。一般化すると、そのプログラムの特定の部分、つまり関数、メソッド、クラス、あるいはこれらをひとまとめにしたグループをテストする。 私たちはその部分を被試験システム(SUTと略すこともある)と呼んでいる。
テスト対象のシステムが正しく動作していれば、自動テストはパスし、そうでなければテストは失敗する。実際のアプリケーションでは、開発が進むにつれて、このようなテストが数多く蓄積されていく。
単体テスト、統合テスト、エンドツーエンドテストなどなど。これらの区別は便利だが、今は気にする必要はない。これらはすべて同じ土台を共有している。
この章では、テスト駆動開発(TDD)を行う。テスト駆動開発とは、新しい機能やバグ修正のたびに、まずそのための自動テストを書くことから始めるということだ。テストを書き、テストを実行し、テストが失敗したことを確認する(そしてテストコードが実際に動作していることを確認する)。テストがパスすれば、機能することがわかる。
これは、最初に機能を実装し、その後にテストを書くのとは異なるプロセスだ。テストを最初に書くことで、コードのインタフェースを考え、"自分のコードが機能していることをどうやって知るのか?"という問いに答えることになる。この利点はすぐに役立つが、それがすべてではない。 ...
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