gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:41:05 27 4
gpt4 key购买 nike

这更像是一个过程问题,但我现在用 Python 编程已经有一段时间了,我试图理解单元测试、功能测试之间的区别,以及何时适本地使用模拟以便测试功能。我有以下安排:

@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. 两者都执行以测试代码流是否正常工作以及功能是否按预期工作。这对我来说似乎非常多余。

我希望您对此有想法和意见。我想,从某种意义上说,这个问题是在询问在何处与 mock 划清界限。真正应该被 mock 的是什么?单元测试是测试代码流,还是只是测试函数的输入/输出?

作为附加说明,选项 1 似乎符合“单元”测试的想法;但是,源代码的任何更改也需要更新测试。这是单元测试的目标吗?

最佳答案

看来您对测试分类的各种方法有点困惑。让我试着澄清一下。

单元测试是最低级别的测试,较高级别是模块、集成和系统测试。

功能测试是仅查看代码的“功能”方面而不是“非功能”方面的测试。可以在每个级别执行功能测试。

问题 1 和 2 之间的区别是 1 是“白盒”测试,2 是“黑盒”测试。黑盒测试仅在单元/模块/系统的公共(public)接口(interface)上运行,白盒测试也会查看被测试代码的内部。

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

  • 尝试以最少的努力测试最多的代码——这意味着我更喜欢系统测试而不是单元测试,更喜欢黑盒测试而不是白盒测试。
  • 对于复杂的算法,我使用白盒单元测试来确保算法在所有极端情况下都是正确的。
  • 一旦项目达到一定的成熟度(最好之前将其发布给客户;-)我让测试由 Jenkins 等持续集成框架自动运行。
  • 查看测试覆盖率并力争达到 100%!

关于Python 单元测试 - 是否应该模拟其他 ClassMethods?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32622040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com