代码之家  ›  专栏  ›  技术社区  ›  Leif Andersen

具有可变测试数的PYUnit

  •  3
  • Leif Andersen  · 技术社区  · 14 年前

    我想做的是创建一个文件夹,人们可以在其中放入一个文件进行测试,并让PyUnit自动展开,以便将测试作为单独的测试运行。目前,我正在做的是:

    class TestName(unittest.testcase):
        def setUp(self):
            for file in os.listdir(DIRECTORY):
                # Setup Tests
    
        def test_comparison(self):
            for file in os.listdir(DIRECTORY):
                # Run the tests
    
    def suite():
        return unittest.TestSuite([
    unittest.TestLoader().loadTestsFromTestCase(TestName),
    ])
    
    if __name__ == "__main__":
        unittest.TextTestRunner(verbosity=2).run(suite())
    

    显然,这有很多问题,比如如果任何测试失败,整个事情都失败了等等。我想做的是,设置PYUnit,以便它为目录中的每个文件运行一个测试(或一个测试用例)。现在,我想我能做的就是用这两个方法创建上面列出的类,但是为了成功地创建,我必须添加一个上下文参数,例如:

    def setUp(self, filepath):
        # Do stuff
    

    然后我可以将循环放入主代码块中,并运行如下测试:

    def suite():
        return unittest.TestSuite([
    unittest.TestLoader().loadTestsFromTestCase(TestName, file),
    ])
    
    if __name__ == "__main__":
        for file in DIRECTORY:
            unittest.TextTestRunner(verbosity=2).run(suite(file))
    

    但我不知道如何在不重写hole unittest.testcase()类的情况下完成这项工作。是否有任何方法可以做到这一点,或者是否有任何其他方法可以根据文件夹中的文件数动态扩展测试/测试用例集?谢谢。

    3 回复  |  直到 11 年前
        1
  •  2
  •   Mark Roddy    14 年前

    你可以使用 nose 支持 test generators . 这看起来像这样:

    def test_comparison():
        for file in os.listdir(DIRECTORY):
            yield run_cmp_test, file
    
    def run_cmp_test(file):
        # Run the tests
    

    funcargs 在PY.试验中。

        2
  •  2
  •   Leif Andersen    14 年前

    好吧,我想我找到了我问题的答案。我会说我使用的是全局名称空间,但出于某种原因,我通常对名称空间的了解与它的面目不符。

    class TestImage(unittest.TestCase)
        pass #Do stuff, as well as using the filename variable
    
    def suite():
        return unittest.TestSuite([
    unittest.TestLoader().loadTestsFromTestCase(TestImage),
    ])
    
    if __name__ == "__main__":
        for filename in os.listdir(sys.path[0]):
            unittest.TextTestRunner(verbosity=2).run(suite())
    

    这将为目录中的每个文件名运行一个测试用例。(和文件夹名称)。尽管我不知道为什么我可以在UnitTest类中使用文件名。它必须与这些宏加载和运行类的方式有关。

        3
  •  0
  •   poolie    11 年前

    testscenarios

    class MyTest(unittest.TestCase):
    
        scenarios = [os.listdir(sys.path[0])]
    
        ...