我如何通过单元测试访问数据库的python方法?

时间:2017-04-28 01:20:16

标签: python unit-testing python-unittest

def insert_env(self, env):
        """Inserts a new environment into ENV_TABLE

        Keyword arguments:
        env -- name of environment to be inserted
        """
        info = {}
        # populate info dictionary
        sql = (
            """INSERT INTO my_table (...) VALUES (...)""")
        try:
            DML(sql, info)
        except oracleException as e:
            logger.debug('dml {0}  resulted in error {1}'.format(sql, e))

这里我有一个函数,它聚集info字典并将值插入数据库的表中。 DML是来自另一个函数的辅助方法,它已经存在了一段时间并且调用了oracle数据库,大部分数据库信息已经在该函数中进行了硬编码。我该如何对这个功能进行单元测试?我无法模拟数据库,因为帮助函数是硬编码的,可以访问我们的生产数据库。

2 个答案:

答案 0 :(得分:1)

帮助功能DML不是您正在测试的单元的一部分;模拟。显然,您需要在insert_env中进行测试的唯一方法是使用适当的参数调用DML,并在DML引发异常时使用记录器。

info中的局部变量insert_env永远不会在调用DML后再次使用这一事实表明这不是完整函数。可能还有更多要测试,但不可能用所提供的信息说出来。

答案 1 :(得分:1)

首先使您的sql字符串成为全局常量,最好是在第二个文件中。然后模拟db调用。

<%= @user.first_name %>