Python单元测试是否应该模仿其他ClassMethods?

2024-06-28 16:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这更像是一个过程问题,但我已经用Python编程一段时间了,我试图理解单元测试、函数测试之间的区别,以及何时适当地使用mock来测试函数。我有以下安排:

@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]

基本上,现在我想为这个函数编写一些测试。我正在考虑三种方法,我真的不确定哪种方法是正确的(阅读:最广泛接受的)做事方式。你知道吗

  1. 编写一个模拟load_definitions函数的测试,确保当cls._definitionsDictNone时,调用load_definitions时不带任何参数。(我假设这是一个“严格的单元测试”)
  2. 编写一个测试,该测试不模拟load_definitions函数,而只是确保在给定特定输入的情况下输出与预期一致。(我假设这是一个“严格的功能测试”)
  3. 为了测试代码流是否正常工作以及函数是否按预期工作,请执行这两项操作。这对我来说似乎非常多余。你知道吗

我很想听听你对此的想法和看法。我想,在某种意义上,这个问题是在问,在哪里用嘲弄来划清界限。真正应该嘲笑的是什么?单元测试是测试代码流,还是仅仅是函数的输入/输出?你知道吗

作为补充说明,选项1似乎与“单元”测试的思想是一致的;然而,源代码中的任何更改也需要更新测试。这是单元测试的目标吗?你知道吗


Tags: 方法key函数nonereturnif过程编程
1条回答
网友
1楼 · 发布于 2024-06-28 16:18:29

似乎您对分类测试的各种方法有点困惑。我来澄清一下。你知道吗

单元测试是最低级别的测试,更高级别的是模块、集成和系统测试。你知道吗

功能测试是只看“功能”方面而不是代码的“非功能”方面的测试。功能测试可以在每个级别进行。你知道吗

你的问题中1和2的区别在于1是“白盒”测试,2是“黑盒”测试。黑盒测试只在单元/模块/系统的公共接口上运行,白盒测试也会查看被测试代码的内部。你知道吗

我个人对测试的看法如下:

  • 试着用最少的精力测试最多的代码,这意味着我更喜欢系统测试而不是单元测试,更喜欢黑盒测试而不是白盒测试。你知道吗
  • 对于复杂的算法,我使用白盒单元测试来确保算法在所有情况下都是正确的。你知道吗
  • 一旦项目达到一定的成熟度(最好是在发布给客户之前),我就让测试由一个像Jenkins这样的持续集成框架自动运行。你知道吗
  • 看看测试覆盖率,争取100%!你知道吗

相关问题 更多 >