【发布时间】:2014-02-07 16:29:25
【问题描述】:
为了自动生成参数化测试,我试图通过冻结现有方法的一些参数来将方法添加到类中。这是一段 Python 3 代码
class A:
def f(self, n):
print(n)
params = range(10)
for i in params:
name = 'f{0}'.format(i)
method = lambda self: A.f(self, i)
setattr(A, name, method)
但是,以下几行会产生相当令人失望的输出
a = A()
a.f0()
打印“9”(而不是“0”)。我一定做错了什么,但我看不出是什么。你能帮忙吗?
非常感谢
编辑:这个问题确实是重复的。我想感谢所有 cmets 的质量,这比原始答案要深得多。
【问题讨论】:
-
对于测试中的此类内容,请尝试mock
-
@warwaruk:看了快速入门指南后,我不确定 mock 有什么帮助……但我很高兴了解这个包。在某些时候可能会被证明是有用的。