Python doctest:如何测试数据库插入或删除功能?

时间:2017-07-30 12:27:02

标签: python doctest

问题很简单,答案我不知道......

我是新手测试,我在测试类驱动sql3数据库时遇到问题。测试这样一个类的最佳方法是什么?测试类或测试 init 功能不是问题,而是其他问题?测试插入测试行?

import sqlite3


class DataBase:
    def __init__(self):
        self._database_path = 'data.sql'
        self._conn = sqlite3.connect(self._database_path)
        self._cursor = self._conn.cursor()

    def get(self, sql):
        # select
        self._cursor.execute(sql)
        dataset = []
        for row in self._cursor:
            dataset.append(row)

        return dataset

   def post(self, sql):
       # insert
       self._cursor.execute(sql)
       self._conn.commit()

谢谢你们所有人,谢谢你们的所有答案!!

2 个答案:

答案 0 :(得分:0)

您可以使用数据库的回滚功能。 只需将self._conn.commit()替换为self._conn.rollback(),您就可以测试sql的有效性而不会对数据产生任何影响。

如果您需要测试一系列操作(即:获取数据 - >修改数据 - >插入新数据 - >删除某些数据 - >再次获取数据),您可以删除所有{{1}在您的代码中,运行测试并最终调用_conn.commit()

示例:

_conn.rollback()

答案 1 :(得分:0)

我认为官方sqlite3测试中的CursorTests就是一个很好的例子。

https://github.com/python/cpython/blob/master/Lib/sqlite3/test/dbapi.py#L187

您可以编写setUptearDown方法来设置和回滚数据库。

from unittest import TestCase


class TestDataBase(TestCase):
    def setUp(self):
        self.db = DataBase()

    def test_get(self):
        pass # your code here

    def test_post(self):
        pass # your code here