gpt4 book ai didi

Python 3 单元测试 : Possible to append new test_* methods?

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:01 24 4
gpt4 key购买 nike

我正在使用 Python 3.4.1 和单元测试模块来验证另一个软件。

需要运行另一个软件,并且其输出必须由 python 脚本解析以进行验证。输出文件是一个包含未知数量元素的 XML 文件。

目前,我一直在使用subTest()为每个 XML 元素生成一个子测试。这不正是我想要的。

我想为 XML 文件中的每个元素创建一个 test_* 方法。问题是我事先不知道会有多少元素,所以我需要一种方法来自动向单元测试添加新的 test_* 方法。我认为有一个 setUpClass() 方法可以调用外部软件来生成 XML 并构建要运行的 test* 方法的更新列表。

但我认为这些方法被添加到单元测试的方法列表中,以便在执行任何操作之前运行,因此一旦我到达添加新方法的位置(使用 setattr( ) 例如,从 setUpClass() 内部),列表已经构建,并且新方法永远不会运行...

是否可以动态更改要在单元测试中运行的方法列表?

谢谢!

最佳答案

这是我想出的一个变体:

import unittest

class MyClass:
def setup(self):
# run external software
def parse_xml(self):
# parse the xml file
def generator(self, test_class, a, b):
def test(self):
self.assertEqual(a, b)
return test

def add_test_methods(self, test_class):
for i in range(len(self.all_status)):
test = self.generator(test_class, self.all_status[i], STATUS_SUCCESS)
setattr(test_class, "test_uid_%d" % i, test)


class TestIO(unittest.TestCase):
pass

mb = MyClass()
mb.setup()
mb.parse_xml()
mb.add_test_methods(TestIO)

if __name__ == '__main__':
unittest.main()

技巧是在任何类之外生成和解析 XML 文件,并使用 setatt() 将生成的方法添加到类中。这种方法的问题在于它在测试套件之外运行代码,而我希望不要这样做。因此,失败将破坏整个套件(因为 unittest 不会捕获错误...)

也许我可以将 XML 生成移到它自己的测试类中?

还有更好的建议吗?

关于Python 3 单元测试 : Possible to append new test_* methods?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25536833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com