我正在尝试创建一个使用' with'的测试框架。阻止运行断言,例如:
def test():
stack = stack()
stack.push('a')
with expectations():
not stack.empty()
len(stack) == 2
调用test
时,with expectations()
块实际上会运行与
assert eval('not stack.empty()')
assert eval('len(stack) == 2')
我已经考虑过使用一个装饰器来测试方法本身,它会在执行前转换整个函数,但是我想知道是否只有这样做才能执行&#39 ;与'通过在__enter__
对象的expectations
方法中运行一些代码来声明语句。正在进行的工作:
def __enter__(self):
# get parent frame with inspect
# get the block code that forms the 'with' statement
# run 'assert eval(...)' for each line the block
# skip actual execution of the block
有可能吗?在装饰器中执行之前,以某种方式操作方法会更好吗?