装饰器在类中起作用。每个实例化是否应该再次运行装饰器功能?

时间:2013-08-09 06:13:26

标签: python decorator nose

我已经读完了;我最接近的是提到不支持使用生成器函数和装饰器函数

class getsize方法:setUp tearDowngetfilesize 用鼻子with_setup(setUp,tearDown)

我还有一个独特的生成函数(在同一个文件中) 使用循环创建getsize class的实例并调用方法getfilesize

当我通过nosetests;运行文件时,我发现@with_setup只在nose运行类时运行。

当我运行发电机功能时;永远不会被访问。作为一种解决方法,我添加了对setUptearDown方法的调用;我得到了预期的结果。这真让我烦恼,我已经做出了相当大的努力来找到答案。

[附加]这是代码部分:

  class Test_getFileSize:
    import logging
    from nose.tools import with_setup
    log = logging.getLogger("Test getfilesize")
        def setUp(self):
            print " running Setup",self.testsize
            with open(self.mytestfile, "wb") as out:
            out.seek(self.testsize-1)
            out.write('0')
            out.close()
        def tearDown(self):
            import os
            print "Running tearDown"
            os.remove(self.mytestfile)
    @with_setup(setUp,tearDown)
    def test_getFileSize(self):`

[此方法的其余部分和init跟随,但与问题无关。

1 个答案:

答案 0 :(得分:0)

正如其他人提到的那样,为了进一步明确,我正在重申,不需要在测试函数中添加@with_setup装饰器。您已经在课程中添加了设置和拆卸功能,它们将在测试之前和之后自动运行。

从鼻子文档:

  

请注意,with_setup仅对测试函数有用,而不适用于测试   方法或TestCase子类内部。

现在,在你的情况下,你在TestCase类中有with_setup。鼻子文档明确提到这不起作用

但是你已经解决了这个难题,现在只需删除@with_setup装饰器就完成了。你的代码应该看起来像这样

class Test_getFileSize:
    def setUp(self):
        print " running Setup",self.testsize
        ...

    def tearDown(self):
       ...
       print "Running tearDown"
       ...

    def test_getFileSize(self):
       ...