0

我创建了一个 python 类 Test_getFileSize 用于鼻子

相关章节:

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 方法永远不会运行。

我想要做的是测试不同的文件大小(即传递一个文件大小值)。

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

谢谢吉姆

4

1 回答 1

0

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

有关简单示例/文档,请参见此处:http: //nose.readthedocs.org/en/latest/writing_tests.html#test-generators

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

话虽如此,您可能会发现拥有一个迭代文件名/大小列表并对每个文件执行测试的测试方法就足够了。那里的工作明显减少,但也导致了一组测试的单个“测试”输出线。

您可以参考这个问题来回答一个人是如何做到这一点的:

鼻子,unittest.TestCase 和元类:未发现自动生成的 test_* 方法

于 2013-08-07T18:19:18.033 回答