Python单元测试 - 其他ClassMethods应该被嘲弄吗?

时间:2015-09-17 03:13:23

标签: python unit-testing testing mocking

这是一个过程问题而不是其他任何问题,但我现在已经用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时没有args。 (我假设这是一个“严格的单元测试”)
  2. 编写一个不模拟load_definitions函数的测试,但只是确保在给定某个输入的情况下输出符合预期。 (我假设这是一个“严格的功能测试”)
  3. 两者都是为了测试代码流是否正常工作并且函数按预期工作。这对我来说似乎是多余的。
  4. 我很想你对此的想法和意见。我想,从某种意义上说,这个问题是询问在哪里划线嘲笑。应该嘲笑什么?单元测试是测试代码流,还是简单的函数输入/输出?

    作为补充说明,第1号选项似乎与“单位”测试的想法相符;但是,源代码中的任何更改都需要更新测试。这是单元测试的目标吗?

1 个答案:

答案 0 :(得分:1)

您似乎对各种测试分类方法感到困惑。让我试着澄清一下。

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

功能测试是仅考虑功能测试的测试。方面,而不是非功能性的'代码方面。可以在每个级别执行功能测试。

您的问题中1和2之间的差异是1是一个白盒'测试,以及2 a'黑盒子'测试。黑盒测试仅在单元/模块/系统的公共接口上运行,白盒测试也在内部测试代码内部。

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

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