背景: 我正在尝试为git测试我的包装类。这个类在挂起或失败时执行重试git命令(我们的回购很大)。我可以用mockproc - https://pypi.python.org/pypi/MockProc/
之类的东西来模拟git我面临的问题是如何测试重试逻辑,理想情况下我想要的是能够做到这一点 -
@integrationtest('git')
def test_git_fetch(mock_proc):
mock_proc.add_scripts("sleep (60)",
"sleep (60)",
"exit (-1)" )
mygit.fetch()
assert mock_proc.output_signal_count == 3
assert mock_proc.get_output_signals[0] == -1
所以在这种情况下,当mygit.fetch()
重试git 3次时,每次运行add_scripts
函数中定义的脚本。使用mockproc
模块,我可以模拟给定脚本的任何命令,但是我很难过如何实现重试测试,以便每次重试都运行不同的脚本。如果有人可以指出一些可以帮助我实现这个目标的模块,或者某种方式来扩展mockproc来添加重试处理,我将不胜感激。
答案 0 :(得分:1)
我在模拟测试之前遇到过类似的问题。我听到了这个答案,非常有帮助
is there a way to track the number of times a function is called?
一种方法是创建要为其计算属性访问权的实例的代理:
from collections import Counter
class CountingProxy():
def __init__(self, instance):
self._instance = instance
self.count = Counter()
def __getattr__(self, key):
if hasattr(self._instance, key):
self.count[key] += 1
return getattr(self._instance, key)
>>> l = [1,2,3,4,5]
>>> cl = CountingProxy(l)
>>> cl.pop()
5
>>> cl.append(10)
>>> cl.index(3)
2
>>> cl.reverse()
>>> cl.reverse()
>>> cl.count
Counter({'reverse': 2, 'pop': 1, 'append': 1, 'index': 1})