1. Unit testとは
Unitとはアプリケーションのテスト可能な最小の部品単位のことです。
プログラムにおける「Unit」とは、一般的に個々の関数やメソッドのことを指します。
よって、Unit testは、関数やメソッドレベルでコードが設計通りに動作することを保証するために行うテストです。
2. Unit testを行うメリット
1. バグが早期発見できる
ユニットテストは、開発の初期段階でコードの問題を発見するのに役立ちます。例えば、関数やメソッドが期待通りの出力を返さない場合、ユニットテストはこれを捉え、開発者が問題を修正する機会を提供します。
2. コードの変更が容易になる
ユニットテストが存在すると、開発者は新たな機能を追加したり、既存のコードをリファクタリングしたりする際に、その変更が既存の機能に悪影響を及ぼしていないことを確認できます。これは、ユニットテストが各関数やメソッドが期待通りに動作することを保証するためです。
これは、特に大規模なプロジェクトや多数の開発者が関与するプロジェクトでは非常に重要です。ユニットテストがあることで、開発者は自分の変更が他の部分のコードに予期しない影響を及ぼすことなく、安心してコードを改善したり新機能を追加したりすることができます。これは、ソフトウェア開発の効率性と品質を大幅に向上させる可能性があります。
3. 設計の改善に役立つ
「テストしやすいコードはいいコード」と言われていたりいなかったりします。
ユニットテストは、各関数やメソッドが独立して機能することを必要とします。
そのため、テストしやすいようにコードを再利用可能かつ疎結合な単位に分割することで、ソフトウェア設計を改善し、ソフトウェア設計の全体的な品質と保守性を向上させるのに役立ちます。
4. テストを自動化できる
一度テストコードを書いてしまえば、同じテストを何度でも繰り返し実行することができるようになるため、テストの再現性が高くなります。これにより、コードの変更を行った場合の影響範囲や不具合の特定が容易になります。
また、CI/CDパイプラインに組み込むことができるようになり、高速な機能開発や改善のサイクルの実現に寄与します。
3. PythonのUnit testツール
unitttest1
- メリット
- Python標準ライブラリに含まれているので、追加のインストールが不要
- 他の言語の主要なユニットテストフレームワークと同様の構文を持つため、他言語習得者が身に着けやすい
- デメリット
- コードがpytestに比べて冗長になり、可読性に劣る
import unittest
# テスト対象
def add_numbers(a, b):
return a + b
# テストコード
class TestAddNumbers(unittest.TestCase):
def test_add_positive_numbers(self):
self.assertEqual(add_numbers(2, 3), 5)
def test_add_negative_numbers(self):
self.assertEqual(add_numbers(-2, -3), -5)
def test_add_zero(self):
self.assertEqual(add_numbers(0, 0), 0)
python -m unittest test_unittest_sample.py
pytest2
- メリット
- unittestと互換性があり、unittestで書かれたテストコードを実行できるうえ、よりシンプルな構文でテストコードを記述でき、導入が容易
- デメリット
- pytestはサードパーティのフレームワークであるため、使用するには追加でインストールが必要
import pytest
# テスト対象
def add_numbers(a, b):
return a + b
# テストコード
def test_add_numbers_pytest():
assert add_numbers(2, 3) == 5
assert add_numbers(-2, -3) == -5
assert add_numbers(0, 0) == 0
pytest test_pytest_sample.py
4. VSCodeでUnit testを実行する
今回はPython&pytestを使用します。
1. VSCodeにPython拡張機能をインストール
2. pytestライブラリをインストール
pip install pytest