gpt4 book ai didi

python - Python unittest 模块中 unittest.main() 的含义

转载 作者:IT老高 更新时间:2023-10-28 20:48:18 27 4
gpt4 key购买 nike

我正在尝试学习 Python 中的单元测试,特别是 unittest 模块。

考虑以下几行:

import unittest

class abc(unittest.TestCase):
def xyz():
...

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

由于对 unittest.main() 的调用,我可以看到我所有的测试用例都在运行。

我只是想知道这个调用是如何让所有测试用例运行的。

我知道,因为我为每个测试类都从 unittest.TestCase 继承,所以它发挥了所有作用。有什么见解吗?

最佳答案

unittest 关联的

main 实际上是 TestProgram 的一个实例,它在实例化时会运行您的所有测试。

以下是从 http://pythonhosted.org/gchecky/unittest-pysrc.htmlunittest 源复制的相关代码:

735  class TestProgram:
752 - def __init__(self, module='__main__', defaultTest=None,
753 argv=None, testRunner=None, testLoader=defaultTestLoader):
754 if type(module) == type(''):
755 self.module = __import__(module)
756 for part in module.split('.')[1:]:
757 self.module = getattr(self.module, part)
758 else:
759 self.module = module
760 if argv is None:
761 argv = sys.argv
762 self.verbosity = 1
763 self.defaultTest = defaultTest
764 self.testRunner = testRunner
765 self.testLoader = testLoader
766 self.progName = os.path.basename(argv[0])
767 self.parseArgs(argv)
768 self.runTests()
769
770 - def usageExit(self, msg=None):
771 if msg: print msg
772 print self.USAGE % self.__dict__
773 sys.exit(2)
774
775 - def parseArgs(self, argv):
776 import getopt
777 try:
778 options, args = getopt.getopt(argv[1:], 'hHvq',
779 ['help','verbose','quiet'])
780 for opt, value in options:
781 if opt in ('-h','-H','--help'):
782 self.usageExit()
783 if opt in ('-q','--quiet'):
784 self.verbosity = 0
785 if opt in ('-v','--verbose'):
786 self.verbosity = 2
787 if len(args) == 0 and self.defaultTest is None:
788 self.test = self.testLoader.loadTestsFromModule(self.module)
789 return
790 if len(args) > 0:
791 self.testNames = args
792 else:
793 self.testNames = (self.defaultTest,)
794 self.createTests()
795 except getopt.error, msg:
796 self.usageExit(msg)
797
798 - def createTests(self):
799 self.test = self.testLoader.loadTestsFromNames(self.testNames,
800 self.module)
801
802 - def runTests(self):
803 if self.testRunner is None:
804 self.testRunner = TextTestRunner(verbosity=self.verbosity)
805 result = self.testRunner.run(self.test)
806 sys.exit(not result.wasSuccessful())
807
808 main = TestProgram

因此,当您执行 unittest.main() 时,会创建一个 TestProgram 对象,该对象在第 768 行调用 self.runTests() . 构造函数还将您当前的文件作为包含测试的默认模块 (module='__main__')。

当调用 runTests() 时,它又调用 self.testrunner.run()。当你引用TextTestRunner类的“run”方法时,你会发现它实际运行并报告了你所有的测试结果。

测试发现由 TestProgram.parseArgs 在您调用 unittest.main() 时在第 775 行完成。第 798 行的 self.createTests 实际上负责发现所有测试用例并创建测试套件。这就是所有的魔法。

关于python - Python unittest 模块中 unittest.main() 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992731/

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