在运行时操作'with'块

时间:2015-03-05 10:22:07

标签: python python-3.x metaprogramming abstract-syntax-tree

我正在尝试创建一个使用' 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

有可能吗?在装饰器中执行之前,以某种方式操作方法会更好吗?

0 个答案:

没有答案