我使用python3.4.1和unittest模块来验证另一个软件。在
另一个软件需要运行,它的输出必须由python脚本解析以进行验证。输出文件是一个包含未知数量元素的XML文件。在
目前,我一直在使用^{
我想为XML文件中的每个元素创建一个测试方法。问题是我事先不知道会有多少元素,所以我需要一种方法来自动向unittest添加新的测试方法。我想有一个setUpClass()方法,它将调用外部软件来生成XML并生成要运行的test*方法的更新列表。在
但是我认为这些方法会被添加到unittest的方法列表中,以便在执行任何操作之前运行,因此一旦我到达添加新方法的点(例如从setUpClass()
内部使用setattr()
),列表已经构建,新方法永远不会运行。。。在
是否可以动态更改要在unittest中运行的方法列表?在
谢谢!在
以下是我想出的一个变体:
{and parse>使用类的任何方法来生成unittest无法捕获错误…)
也许我可以将XML生成转移到它自己的测试类中?在
有更好的建议吗?在
我想到了这个。我试过了@big\u gie提交的代码。这样,setUp和tearDown也将按照单元测试规则运行。。在
import unittest
def generator(test_class, a, b): def test(self): self.assertEqual(a, b) return test
def add_test_methods(test_class): test_list = [[2,3, 'one'], [5,5, 'two'], [0,0, 'three']] for case in test_list: test = generator(test_class, case[0], case[1]) setattr(test_class, "test_%s" % case[2], test)
class TestIO(unittest.TestCase):
def setUp(self): print 'Setup' pass
def tearDown(self): print 'TearDown' pass
add_test_methods(TestIO)
if __name__ == '__main__':
unittest.main(verbosity=1)
结果:
相关问题 更多 >
编程相关推荐