doctest
docstring 内に書ける。凡例として使える。
使い方
doctest を import し、docstring 内で以下のように書き、doctest.testmod()
を呼ぶ。実行する際は python ${ファイル名}.py -v
とする。
サンプルコード
sample.py
# -*- coding: utf-8 -*-
import doctest
def twice(n):
""" 引数を 2 倍して返す関数
>>> twice(8)
16
>>> twice(1850923)
3701846
"""
return n * 2
if __name__ == "__main__":
doctest.testmod()
実行
python sample.py -v
結果
Trying:
twice(8)
Expecting:
16
ok
Trying:
twice(1850923)
Expecting:
3701846
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.twice
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
docstring を読んでみる
python
import sample
help(sample.twice)
twice(n)
引数を 2 倍して返す関数
>>> twice(8)
16
>>> twice(1850923)
3701846
これは…ありがたい…
Instance Method をテストする場合
- testmod に引数として extraglobs を与える。extraglobs で定義された dictionary の key と値のセットは global 変数にマージされる。
sample.py
# -*- coding: utf-8 -*-
class IntUtil:
def twice(self, n):
""" 引数を 2 倍して返す関数
>>> mine.twice(8)
16
>>> mine.twice(1850923)
3701846
"""
return n * 2
if __name__ == "__main__":
import doctest
doctest.testmod(extraglobs = {'mine': IntUtil()})
unittest
一般的な単体テストおよび結合テストはこちらのモジュールで行う
開始処理と終了処理
setUp: 開始時実行
tearDown: 終了時実行
functions
関数名 | 説明 |
---|---|
assertEqual(a, b, msg=None) | a == b |
assertNotEqual(a, b, msg=None) | a != b |
assertTrue(expr, msg=None) | bool(x) is True |
assertFalse(x) | bool(x) is False |
assertIs(a, b) | a is b |
assertIsNot(a, b) | a is not b |
assertIsNone(x) | a is None |
assertIsNotNone(x) | a is not None |
assertIn(a, b) | a in b |
assertNotIn(a, b) | a not in b |
assertIsInstance(a, b) | isinstance(a, b) |
assertNotIsInstance(a, b) | not isinstance(a, b) |
sample_test.py
# -*- coding: utf-8 -*-
import unittest
import sample
class SampleTest(unittest.TestCase):
def setUp(self):
self.util = sample.IntUtil()
def test_twice(self):
# 足した数と同値か
import random
roop = 0
while roop != 10000:
n = random.randint(0, 100)
ans = n + n
self.assertEqual(self.util.twice(n), ans)
roop += 1
if __name__ == '__main__':
unittest.main()