linux下运行python unitest_python unittest是怎样运行测试的

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。

746315c292f9

image.png

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

746315c292f9

image.png

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

746315c292f9

image.png

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

746315c292f9

image.png

该run方法对应着demo中的最后一行代码。test(result)不太直观,可以修改成suite(result),这样就比较直观了。suite对应着suite.TestSuite()。

TestSuite中没有找到能提供这种用法的方法,找TestSuite的super类 BaseTestSuite,果然在其中找到了call方法

746315c292f9

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方法

746315c292f9

image.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值