美文网首页
python unittest是怎样运行测试的

python unittest是怎样运行测试的

作者: 假程序员 | 来源:发表于2019-12-30 22:13 被阅读0次
import unittest
import unittest.suite as suite
import unittest.loader as loader
import unittest.runner as runner


class MyTest(unittest.TestCase):
    def test_001(self):
        print(id(self))

    def test_002(self):
        print(id(self))


if __name__ == '__main__':
    suite = suite.TestSuite()  # create Test Suite
    tests = loader.TestLoader().loadTestsFromTestCase(MyTest)  # get tests from Test Class
    suite.addTests(tests)  # add tests to Test Suite
    runner.TextTestRunner().run(suite)  # run Test Suite by TextTestRunner

上述代码是一个自己创建testsuite,并运行testsuite中test的demo。


image.png

根据运行结果截图,可以发现,test_001和test_002中的self不是同一个,即两个测试方法对应两个不同的实例。


image.png
第56行代码就是产生该结果的代码,map函数则根据测试方法的名称来创建一个个的测试实例,在本段代码中,实际是将testCaseNames中的方法名一个个取出来,然后MyTest(testMethod),而MyTest的初始化方法是使用的unittest.TestCase的初始化方法。
image.png

到此,如何产生测试实例已完全清晰。

image.png
该run方法对应着demo中的最后一行代码。test(result)不太直观,可以修改成suite(result),这样就比较直观了。suite对应着suite.TestSuite()。
TestSuite中没有找到能提供这种用法的方法,找TestSuite的super类 BaseTestSuite,果然在其中找到了call方法
image.png
call方法中,通过self.run(*args, **kwds),从而将测试交给了run方法执行。run方法中"for test in self"也比较有趣,BaseTestSuite实现了iter,所以可以通过迭代的方式访问。接着执行"test(result)",这对应着testMethod(result) (一个示例:test_001(result)),这也意味着,unittest.TestCase中应该存在call方法
image.png

到此,unittest如何执行测试也已清晰。

相关文章

网友评论

      本文标题:python unittest是怎样运行测试的

      本文链接:https://www.haomeiwen.com/subject/vxqvoctx.html