【问题标题】:Accurate test count when using decorators to supply unit-test data使用装饰器提供单元测试数据时的准确测试计数
【发布时间】:2014-01-15 16:45:18
【问题描述】:

我使用函数装饰器通过 data-provider-functions 将数据提供给我的 python 单元测试。我的解决方案与this guy does 非常相似。有一个未成年人,但非常烦人的例外情况一切正常:

在 phpUnit 中,当使用数据提供者时,测试计数随着提供的每个数据集而增加。当我添加一个数据集并且测试通过时,我可以很容易地看到新数据集已经运行,因为我的测试计数增加了。在 python 中,使用装饰器,测试计数保持不变。到目前为止,我一直在做的是确保在测试从一开始就通过时运行数据集,这是故意引入错误,以查看测试失败。这不是世界末日,但很烦人,我想在这里寻求帮助。

有没有办法增加通过装饰器提供的每个数据集的测试计数?

【问题讨论】:

    标签: python unit-testing decorator


    【解决方案1】:

    下面的 sn-p 显示了如何在装饰器中使用计数器。 我希望您可以将其转移到您的代码中。

    def log(func):
        def inner(*args, **kwargs):
            print('{} {} {} {}'.format(str(inner.count), str(func), args, kwargs))
            inner.count += 1
            return func(args, kwargs)
        inner.count = 1
        return inner
    
    
    @log
    def foo(*args, **kwargs):
        print('{}{}'.format(args, kwargs))
    
    
    def main():
        foo(1, 2, 3, 4)
        foo('a')
        foo('asdf', 'asdf')
    
    
    if __name__ == '__main__':
        main()
    

    这个例子将打印:

    1 <function foo at 0x2711848> (1, 2, 3, 4) {}
    ((1, 2, 3, 4), {}){}
    2 <function foo at 0x2711848> ('a',) {}
    (('a',), {}){}
    3 <function foo at 0x2711848> ('asdf', 'asdf') {}
    (('asdf', 'asdf'), {}){}
    

    这是增加通过装饰器提供的每个数据集的测试计数的一种方法。

    【讨论】:

    • 如果事实证明不可能将每个数据集注册为唯一的测试,这将是一个很好的解决方法!
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 2011-03-02
    • 2012-04-26
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多