【问题标题】:PyUnit with a variable number of tests具有可变数量测试的 PyUnit
【发布时间】:2010-06-29 02:29:05
【问题描述】:

我想做的是创建一个文件夹,人们可以在其中放入一个文件进行测试,并让 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))

但我不确定如何在不重写洞 unittest.TestCase() 类的情况下做到这一点。有什么方法可以做到这一点,或者有没有其他方法可以根据文件夹中有多少文件来动态扩展测试/测试用例集?谢谢。

【问题讨论】:

    标签: python unit-testing oop python-unittest


    【解决方案1】:

    您可以使用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
    

    或者,您也可以在 py.test 中 funcargs

    【讨论】:

    • 这些看起来像是用于发现单元测试的工具。也许我应该澄清一下,要放入文件夹中的文件是数据文件(二进制文件和图像),两者都可以使用标准算法进行处理。因此,除非为每个文件编写单独的测试,否则我看不出如何使用它。
    • 啊,好的。我没有从最初的问题中得到这个。因此,您正在尝试处理“for x in y: test(x)”问题,即测试在特定“x”上失败,但您希望它在“y”中的所有内容上运行?
    • 基本上是的。我还想以类似于单个测试的格式将其输出给用户,但是一旦我启动并运行它就很简单了。谢谢。
    【解决方案2】:

    好的,我想我找到了问题的答案。我会说我使用的是全局命名空间,但由于某种原因,我通常对命名空间的了解一文不值。

    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】:

      您可以使用 testscenarios 模块来执行此操作,如下所示:

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

      【讨论】:

        猜你喜欢
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多