Python 具有可变测试数的PyUnit

Python 具有可变测试数的PyUnit,python,unit-testing,oop,python-unittest,Python,Unit Testing,Oop,Python Unittest,我想做的是创建一个文件夹,人们可以在其中放入一个文件进行测试,并让pyunit自动展开,以便将测试作为单独的测试运行。目前,我正在做的是: class TestName(unittest.testcase): def setUp(self): for file in os.listdir(DIRECTORY): # Setup Tests def test_comparison(self): for file in os.

我想做的是创建一个文件夹,人们可以在其中放入一个文件进行测试,并让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))
def test_comparison():
    for file in os.listdir(DIRECTORY):
        yield run_cmp_test, file

def run_cmp_test(file):
    # Run the tests
class MyTest(unittest.TestCase):

    scenarios = [os.listdir(sys.path[0])]

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

您可以使用对的支持。这看起来像这样:

def suite():
    return unittest.TestSuite([
unittest.TestLoader().loadTestsFromTestCase(TestName, file),
])

if __name__ == "__main__":
    for file in DIRECTORY:
        unittest.TextTestRunner(verbosity=2).run(suite(file))
def test_comparison():
    for file in os.listdir(DIRECTORY):
        yield run_cmp_test, file

def run_cmp_test(file):
    # Run the tests
class MyTest(unittest.TestCase):

    scenarios = [os.listdir(sys.path[0])]

    ...

或者你也可以在py.test中进行测试。

好的,我想我找到了问题的答案。我会说我使用的是全局名称空间,但由于某种原因,我通常对名称空间的了解在它的表面上一落千丈

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类中使用文件名。它必须与这些宏加载和运行类的方式有关。

您可以使用模块来实现这一点,类似这样:

def suite():
    return unittest.TestSuite([
unittest.TestLoader().loadTestsFromTestCase(TestName, file),
])

if __name__ == "__main__":
    for file in DIRECTORY:
        unittest.TextTestRunner(verbosity=2).run(suite(file))
def test_comparison():
    for file in os.listdir(DIRECTORY):
        yield run_cmp_test, file

def run_cmp_test(file):
    # Run the tests
class MyTest(unittest.TestCase):

    scenarios = [os.listdir(sys.path[0])]

    ...

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