Python单元测试——是否应该模拟其他类方法?
这更像是一个过程问题,但我已经用Python编程一段时间了,我试图理解单元测试、函数测试之间的区别,以及何时适当地使用mock来测试函数。我有以下安排:Python单元测试——是否应该模拟其他类方法?,python,unit-testing,testing,mocking,Python,Unit Testing,Testing,Mocking,这更像是一个过程问题,但我已经用Python编程一段时间了,我试图理解单元测试、函数测试之间的区别,以及何时适当地使用mock来测试函数。我有以下安排: @classmethod def get_value(cls, key): if cls._definitionsDict is None: cls.load_definitions() if not key in cls._definitionsDict: return None el
@classmethod
def get_value(cls, key):
if cls._definitionsDict is None:
cls.load_definitions()
if not key in cls._definitionsDict:
return None
else:
return cls._definitionsDict[key]
基本上,现在我想为这个函数编写一些测试。我正在考虑三种方法,我真的不确定哪一种是正确的(阅读:最广泛接受的)做事方式
load\u definitions
函数的测试,确保当cls.\u definitionsDict
为None
时,调用load\u definitions
时不带任何参数。(我假设这是一个“严格的单元测试”)load\u definitions
函数,而只是确保在给定特定输入的情况下,输出符合预期。(我假设这是一个“严格的功能测试”)作为补充说明,选项1似乎与“单元”测试的理念相符;但是,源代码中的任何更改也需要更新测试。这是单元测试的目标吗?似乎您对测试分类的各种方法有点困惑。让我试着澄清一下 单元测试是最低级别的测试,更高级别的是模块、集成和系统测试 功能测试是只关注代码的“功能”方面,而不是“非功能”方面的测试。功能测试可以在每个级别进行 你的问题中1和2的区别在于1是“白盒”测试,2是“黑盒”测试。黑盒测试只在单元/模块/系统的公共接口上运行,白盒测试也会查看正在测试的代码内部 我个人对测试的看法如下:
- 尽量用最少的工作量测试最多的代码——这意味着我更喜欢系统测试而不是单元测试,更喜欢黑盒测试而不是白盒测试
- 对于复杂的算法,我使用白盒单元测试来确保算法在所有情况下都是正确的
- 一旦项目达到一定的成熟度(最好是在发布给客户之前;-)我就让测试由像Jenkins这样的持续集成框架自动运行
- 看看测试覆盖率,争取100%李>