对于python nose测试类:传递可选参数的正确方法是什么

时间:2013-08-07 18:10:11

标签: python nose

我创建了一个python类Test_getFileSize,用于使用nose

相关部分:

def __init__(self,mytestfile="./filetest",testsize=102400):
    ''' Constructor'''
    print " Running __init__", testsize,mytestfile
    self.testsize=testsize
    self.mytestfile = mytestfile

和主力方法:

@with_setup(setUp, tearDown)
def test_getFileSize(self):
     from nose.tools import ok_, eq_,with_setup
     import mp4
     with open(self.mytestfile,"rb") as out:
          filesize=mp4.getFileSize(out)
          eq_(self.testsize,filesize,msg='Passed Test  size')
          print "Results ", filesize,self.testsize

如果我对包含此类的文件运行nosetest,它会使用默认值和正确的setUp和tearDown方法正确测试该类。问题是,当我编写一个类来执行此操作时,setUp方法永远不会运行。

我希望能够做的是测试不同的文件大小(即传递文件大小值)。

如果有更好的方法,我会全力以赴。如果可能的话,我宁愿不通过命令行来做。

由于 吉姆

1 个答案:

答案 0 :(得分:0)

你可以编写一个测试函数(不是类的一部分),其中测试函数本身是一个生成器,每个yield返回一个新函数,用参数运行以生成另一个测试。如果您有500个不同的文件名/文件大小作为要测试的列表,那么这将很有效。

请点击此处查看简单示例/文档:http://nose.readthedocs.org/en/latest/writing_tests.html#test-generators

使用测试类,事情变得有点棘手 - 因为它不允许您将此生成器方法用于类方法。您可以使用元类来返回具有适当数量的函数的类来运行测试(例如,每个案例一个。)但这可能超出您想要的范围。

话虽这么说,您可能会发现只需要一个迭代文件名/大小列表的测试方法就可以了,并对每个方法执行测试。那里的工作要少得多,但也会为集体测试集产生一条“测试”输出线。

您可以参考这个问题,以获得一个人如何做到这一点的答案:

nose, unittest.TestCase and metaclass: auto-generated test_* methods not discovered