首页 > 解决方案 > 如何在对象初始化时调用具有特定命名模式的所有方法

问题描述

我开始学习 Selenium,我很好奇如何从PythonOrgSearch继承自的类中实现行为unittest.TestCasetest_即初始化后会自动调用每个开头的方法。我知道这种行为已经实现,TestCase但我对如何制作类似的东西很感兴趣。有没有设计模式可以解决这个问题?

还有一个额外的问题, 有什么意义assert True,因为条件总是True

import unittest
from selenium import webdriver


class PythonOrgSearch(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome("C:\chorme\chromedriver.exe")
        self.driver.get("http://www.python.org")

    def test_example(self):
        print("Test")
        assert True

    def not_test(self):
        print("Not a test")

    def tearDown(self):
        self.driver.close()


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

标签: pythonunit-testing

解决方案


对于第一个问题,您可以使用dir()onself获取其成员的列表(dir 的官方文档)。

之后,您可以通过一些简单的方式测试名称模式,如果它是可调用的,您可以调用它:

for name in dir(self):
    if name[:5] == 'test_' and callable(getattr(self, name)):
        res = getattr(self, name)()
        print(res)

关于你的奖金问题,强制函数重载是一种常见的做法。


推荐阅读