データ抽出SQLの動作をPythonのunittestで確かめたいと思った。
抽出するデータはIDをキー項目として持っており、これでデータを一意に判別できる。
抽出したデータにどのIDが何個あるかが想定と実態で一致すれば、データ抽出が想定通りできたといえると考えた。
今回は連想配列dに各IDのデータの個数を入れてみることにした。
自宅の環境でサッと書きたかったので、DBに接続はせずにlistsに値が返ってきた前提で入力してみた。
test_example.py
import unittest
class Test(unittest.TestCase):
def setUp(self):
print('set up!')
def tearDown(self):
print('tear down...')
def test_No1(self):
d ={1:0, 2:0, 3:0, 4:0}
lists = [{'id':1},{'id':2},{'id':3}]
for l in lists :
d[l["id"]] += 1
print(d)
self.assertEqual(1,d[1]) # 一致
self.assertEqual(1,d[2]) # 一致
self.assertEqual(1,d[3]) # 一致
self.assertEqual(0,d[4]) # 一致
def test_No2(self):
d ={1:0, 2:0, 3:0, 4:0}
lists = [{'id':1},{'id':2},{'id':4}]
for l in lists :
d[l["id"]] += 1
self.assertEqual(1,d[1]) # 一致
self.assertEqual(1,d[2]) # 一致
self.assertEqual(1,d[3]) # 不一致
self.assertEqual(0,d[4]) # 一致
if __name__ == '__main__':
unittest.main()
出力結果はこんな感じ。
出力結果
set up!
{1: 1, 2: 1, 3: 1, 4: 0}
tear down...
.set up!
tear down...
F
======================================================================
FAIL: test_No2 (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "c:\Users\xxxxx\test_example.py", line 28, in test_No2
self.assertEqual(1,d[3])
AssertionError: 1 != 0
----------------------------------------------------------------------
Ran 2 tests in 0.002s
FAILED (failures=1)
うまいこと動作しそうでよかった。
そういえば弊社内ではdefをテスト対象の関数で分けていたけど、テストケース単位で分けた方がいい気がする。def内で複数エラーがあったとしても、最初の1つしか不一致を報告してくれないので...たとえば、
test_example.py
import unittest
class Test(unittest.TestCase):
# ~略~
def test_No2(self):
d ={1:0, 2:0, 3:0, 4:0}
lists = [{'id':1},{'id':2},{'id':4}]
for l in lists :
d[l["id"]] += 1
self.assertEqual(0,d[1]) # 不一致
self.assertEqual(0,d[2]) # 不一致
self.assertEqual(1,d[3]) # 一致
self.assertEqual(0,d[4]) # 一致
# ~略~
のときに不一致を全部検出してくれるのかと思いきや、
F
======================================================================
FAIL: test_No2 (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "c:\Users\xxxxx\test_example.py", line 26, in test_No2
self.assertEqual(0,d[1])
AssertionError: 0 != 1
----------------------------------------------------------------------
Ran 2 tests in 0.002s
最初の1つで止まってしまうみたい。