我想要做的是创建一个文件夹,人们可以在其中放入一个文件进行测试,并让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()类的情况下如何做到这一点。有什么方法可以做到这一点,还是有其他方法我可以根据文件夹中有多少文件动态扩展测试/测试用例集?感谢。
答案 0 :(得分:2)
您可以对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。
答案 1 :(得分: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类中使用filename。它必须与这些宏加载和运行类的方式有关。
答案 2 :(得分:0)
您可以使用 testscenarios 模块执行此操作,如下所示:
class MyTest(unittest.TestCase):
scenarios = [os.listdir(sys.path[0])]
...