【发布时间】:2015-09-17 16:22:38
【问题描述】:
这更像是一个过程问题,但我已经用 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]
基本上,现在我想为这个函数写一些测试。我正在考虑三种方法,我真的不确定哪种方法是正确的(阅读:最广泛接受的)做事方式。
- 编写一个模拟
load_definitions函数的测试,确保当cls._definitionsDict为None时,load_definitions被调用且不带参数。 (我假设这是一个“严格的单元测试”) - 编写一个不模拟
load_definitions函数的测试,而只是确保在给定特定输入的情况下输出符合预期。 (我假设这是一个“严格的功能测试”) - 为了测试代码流是否正常工作以及功能是否按预期工作,请同时执行这两项操作。这对我来说似乎非常多余。
我很想听听您对此的想法和意见。我想,从某种意义上说,这个问题是在询问在哪里与模拟划清界限。真正应该嘲笑什么?是单元测试测试代码流,还是仅仅是函数的输入/输出?
作为补充说明,选项 1 似乎符合“单元”测试的理念;但是,源代码中的任何更改也需要更新测试。这是单元测试的目标吗?
【问题讨论】:
标签: python unit-testing testing mocking