我是一位经验丰富的 PHP/Ruby 开发人员,但现在我正在与 Python 作斗争,我真的需要你的帮助。
我需要通过添加静态属性并覆盖静态函数来修补现有类以使用它。
让我给你看例子:
class Test():
@staticmethod
def generate():
return 10
但是在我的测试套件中,我需要获得以下课程:
class Test():
count = 1
@staticmethod
def generate():
if Test.count < 3:
Test.count += 1
return 1
else:
return 10
所以基本的想法是只在“生成”函数的第 3 次调用中获得 10。
我的第一种方法是使用“补丁”技术,所以我做了:
def my_generate_hash():
return 99
with patch.object(Test, 'generate', staticmethod(my_generate_hash)):
print "Got %d" % check_hash()
Buuut 我无法实现属性“count”并在覆盖方法中使用它(
第二个想法是“模拟”一些东西!所以..
mock = MagicMock(Test)
mock.count = 1
def my_generate_hash():
if Test2.count < 3:
Test2.count += 1
return 1
else:
return 10
mock.generate = my_generate_hash
with patch('__main__.Test', mock):
print Test.generate()
但在实际情况下,我在“测试”类中有其他方法,所以它不起作用。
我被困住了。任何帮助将不胜感激!