PyUnit 配置可变数量的测试
我想做的是创建一个文件夹,大家可以把测试文件放进去,然后让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()类。有没有什么方法可以做到这一点,或者有没有其他方法可以根据文件夹里有多少个文件,动态扩展测试/测试用例的集合?谢谢。
3 个回答
0
你可以使用testscenarios这个模块,像这样操作:
class MyTest(unittest.TestCase):
scenarios = [os.listdir(sys.path[0])]
...
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())
这段代码会对目录中的每个文件名(还有文件夹名)运行一个测试案例。不过,我不太明白为什么我可以在单元测试类中使用文件名。这肯定和那些宏加载和运行这个类的方式有关。