LoginSignup
0
0

Pythonのunittestでデータ抽出SQLのテストをしてみた

Posted at

データ抽出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つで止まってしまうみたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0