在python中使用unittest库进行代码测试

use*_*622 2 python unit-testing

几天来,我一直在努力学习如何在 Python 中正确使用 unittest 库。我已经掌握了一些基础知识,但我对自己提出了挑战 - 测试我之前创建的两个函数。这些是函数:

    def PatternMatch(self, message, number):
        ret_status = 2 # 'No match'
        ret_pattern = -1  

        for pattern in self.PatternList:
            if pattern.active == 1 and pattern.LA == number:
                try:
                    RegExp = re.compile(pattern.regex)
                if RegExp.match(message):
                    ret_status = 1
                    ret_pattern = pattern.ID
                    break

        return ret_status, ret_pattern


    def GetPattern(self, patternID):
        pattern = None
        db = Database()
        query = 'CALL PATTERN_GET'
        query += '(@sql_err_code, @my_status, @my_msg, %s)'
        ret = db.query(query, [patternID])
        if len(ret['data']) == 2:
            pattern = Pattern(ret['data'][1])
        else:
            pattern = Pattern()

        result = {'status': ret['data'][0]}
        return pattern, result
Run Code Online (Sandbox Code Playgroud)

我应该如何开始?我已经使用 mox 库模拟了数据库连接,它可以工作,但是功能呢?我很感激任何帮助。

Ste*_*nes 5

鉴于问题的普遍性,只能提供一般性建议 - 基本上您需要准备将执行以下操作的测试数据和/或输入:

  1. 代码覆盖率 - 在每条决策路径下强制执行所有执行路径。
  2. 决策覆盖率 - 如上所述,但通过各种决策方式 - 例如,如果 a >= 0 需要使用 < 0、a == 0 和 a > 0 进行测试。
  3. 角落案例覆盖 - 代码是否适用于非常大、非常小、非常负、没有值的情况。
  4. 异常覆盖率:引发文档所说的所有异常,可以由try子句中的代码引发,并查看它们是否得到正确处理或应该被允许通过。
  5. 在开始每组测试数据时,始终清楚地说明您要在该组测试数据中实现的目标。