🧪

【社内勉強会②】Unit testについて

2023/10/12に公開

1. Unit testとは

Unitとはアプリケーションのテスト可能な最小の部品単位のことです。
プログラムにおける「Unit」とは、一般的に個々の関数やメソッドのことを指します。
よって、Unit testは、関数やメソッドレベルでコードが設計通りに動作することを保証するために行うテストです。

2. Unit testを行うメリット

1. バグが早期発見できる
ユニットテストは、開発の初期段階でコードの問題を発見するのに役立ちます。例えば、関数やメソッドが期待通りの出力を返さない場合、ユニットテストはこれを捉え、開発者が問題を修正する機会を提供します。
2. コードの変更が容易になる
ユニットテストが存在すると、開発者は新たな機能を追加したり、既存のコードをリファクタリングしたりする際に、その変更が既存の機能に悪影響を及ぼしていないことを確認できます。これは、ユニットテストが各関数やメソッドが期待通りに動作することを保証するためです。
これは、特に大規模なプロジェクトや多数の開発者が関与するプロジェクトでは非常に重要です。ユニットテストがあることで、開発者は自分の変更が他の部分のコードに予期しない影響を及ぼすことなく、安心してコードを改善したり新機能を追加したりすることができます。これは、ソフトウェア開発の効率性と品質を大幅に向上させる可能性があります。
3. 設計の改善に役立つ
「テストしやすいコードはいいコード」と言われていたりいなかったりします。
ユニットテストは、各関数やメソッドが独立して機能することを必要とします。
そのため、テストしやすいようにコードを再利用可能かつ疎結合な単位に分割することで、ソフトウェア設計を改善し、ソフトウェア設計の全体的な品質と保守性を向上させるのに役立ちます。
4. テストを自動化できる
一度テストコードを書いてしまえば、同じテストを何度でも繰り返し実行することができるようになるため、テストの再現性が高くなります。これにより、コードの変更を行った場合の影響範囲や不具合の特定が容易になります。
また、CI/CDパイプラインに組み込むことができるようになり、高速な機能開発や改善のサイクルの実現に寄与します。

3. PythonのUnit testツール

unitttest[1]

  • メリット
    • Python標準ライブラリに含まれているので、追加のインストールが不要
    • 他の言語の主要なユニットテストフレームワークと同様の構文を持つため、他言語習得者が身に着けやすい
  • デメリット
    • コードがpytestに比べて冗長になり、可読性に劣る
test_unittest_sample.py
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)
unittest 実行コマンド
python -m unittest test_unittest_sample.py

pytest[2]

  • メリット
    • unittestと互換性があり、unittestで書かれたテストコードを実行できるうえ、よりシンプルな構文でテストコードを記述でき、導入が容易
  • デメリット
    • pytestはサードパーティのフレームワークであるため、使用するには追加でインストールが必要
test_pytest_sample.py
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 実行コマンド
pytest test_pytest_sample.py

4. VSCodeでUnit testを実行する

今回はPython&pytestを使用します。

1. VSCodeにPython拡張機能をインストール

2. pytestライブラリをインストール

pip install pytest

3. テストの設定をする

  1. 「Testing」拡張機能を開き、「Configure Python Tests」をクリック

  2. 画面上部にテストツールを選択するダイアログが表示される。「pytest」を選択。

  3. テストコードが格納されているフォルダパスを入力。

  4. 「Testing」タブにファイル名、クラス名、テストメソッド名が表示される

脚注
  1. https://docs.python.org/ja/3/library/unittest.html ↩︎

  2. https://docs.pytest.org/ ↩︎

Discussion