unittestモジュールをimportし、unittest.TestCaseクラスを継承したテストクラスを作成する。その際、テストメソッドはtestという単語で始まる必要がある。
import uittest
from my_module import my_function
class MyTest(unittest.TestCase):
def test_my_function(self):
result = my_function(2)
self.assertEqual(result, 4)
if __name__ == '__main__':
unittest.main()
具体例
import unittest
def add(a, b):
return a + b
class TestAddFunction(unittest.TestCase):
def test_add_integer(self):
result = add(2, 3)
self.assertEqual(result, 5)
def test_add_floats(self):
result = add(2.5, 3.5)
self.assertAlmostEqual(result, 6.0, places=2)
def test_add_strings(self):
result = add("Hello, ", "world!")
self.assertEqual(result, "Hello, world!")
if __name__ == '__main__':
unittest.main()
$ python3 test.py
…
———————————————————————-
Ran 3 tests in 0.000s
OK
return a + b + 1 とすると、
$ python3 test.py
FFE
======================================================================
ERROR: test_add_strings (__main__.TestAddFunction)
———————————————————————-
Traceback (most recent call last):
File “/home/vagrant/dev/blockchain/test.py”, line 17, in test_add_strings
result = add(“Hello, “, “world!”)
File “/home/vagrant/dev/blockchain/test.py”, line 4, in add
return a + b + 1
TypeError: can only concatenate str (not “int”) to str
======================================================================
FAIL: test_add_floats (__main__.TestAddFunction)
———————————————————————-
Traceback (most recent call last):
File “/home/vagrant/dev/blockchain/test.py”, line 14, in test_add_floats
self.assertAlmostEqual(result, 6.0, places=2)
AssertionError: 7.0 != 6.0 within 2 places (1.0 difference)
======================================================================
FAIL: test_add_integer (__main__.TestAddFunction)
———————————————————————-
Traceback (most recent call last):
File “/home/vagrant/dev/blockchain/test.py”, line 10, in test_add_integer
self.assertEqual(result, 5)
AssertionError: 6 != 5
———————————————————————-
Ran 3 tests in 0.000s
FAILED (failures=2, errors=1)
Test Classの中で、setUp, tearDownを入れると、テストの実行前後でそれぞれ実行される。
class TestAddFunction(unittest.TestCase):
def setUp(self):
print("setUp() called")
def test_add_integer(self):
result = add(2, 3)
self.assertEqual(result, 5)
def test_add_floats(self):
result = add(2.5, 3.5)
self.assertAlmostEqual(result, 6.0, places=2)
def test_add_strings(self):
result = add("Hello, ", "world!")
self.assertEqual(result, "Hello, world!")
def tearDown(self):
print("tearDown() called")