【Python】 単体試験 / unittest ~ 入門編 ~

■ はじめに

Pythonの単体試験を行う必要がありそうなので、
Pythonの単体試験のやり方を調べてみた

目次

【1】Python の単体試験
【2】Hello world
【3】トラブルシューティング
 1)import でエラーが発生し、単体試験が実行できない
 2)ファイル名が英字/アンダーバー以外の場合のインポートでエラー(PEP8チェックで)

【1】Python の単体試験

Ptyhonでは、標準で完備されているらしい

【2】Hello world

https://www.youtube.com/watch?v=dgxEsRC6PNI

を見ながら、一緒にやってみるといいかも。
素数を判定するメソッドの単体試験。

対象ファイル:ut_demo.py

# 素数判定
def is_prime(value: int) -> bool:  
  if (value <= 1):
    return False

  for i in range(2, value):
    if value % i == 0:
      return False
  return True

if __name__ == '__main__':
  print(is_prime(5))

単体試験:test_ut_demo.py

import unittest

from ut_demo import is_prime

class PrimeTest(unittest.TestCase):
  def test_is_prime_ok(self):
    for i in [2, 3, 5, 7, 11, 13, 17, 19]:
      self.assertTrue(is_prime(i))
  
  def test_is_prime_no(self):
    for i in [1, 4, 6, 8, 9, 10, 12, 14]:
      self.assertFalse(is_prime(i))

  def test_is_prime_negative(self):
    self.assertFalse(is_prime(-1))

  def test_is_prime_raise_typeerror(self):
    with self.assertRaises(TypeError):
      is_prime("invalid_value")

if __name__ == "__main__":
  unittest.main()

【3】トラブルシューティング

1)import でエラーが発生し、単体試験が実行できない

対策

try:
  import boto3
except ImportError:
  # エラーが発生したら、そのまま流す
  pass

2)ファイル名が英字/アンダーバー以外の場合のインポートでエラー(PEP8チェックで)

対策

import unittest
# importlib.import_module を使用する
import importlib
target = importlib.import_module('file-handler')

関連記事

単体試験 / unittest ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/03/31/000000
単体試験 / mox ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/19/000000
単体試験 / nose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/20/221014
単体試験 / pytest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/13/224810
基本編 / 関数def
https://dk521123.hatenablog.com/entry/33868934
基本編 / クラス・継承
https://dk521123.hatenablog.com/entry/33865900