Python自动单元测试实例
Pythonunittest模块的相关用法待测源码类:widget.py
#!/usr/bin/env pythonclass Widget:def __init__(self, size = (40, 40)):self._size = sizedef getSize(self):return self._sizedef resize(self, width, height):if width == 0or height < 0:raise ValueError, "illegal size"self._size = (width, height)def dispose(self):pass
测试代码类:widget_unittest.py
#!/usr/bin/env pythonimport sysimport unittestfrom widget import Widgetclass WidgetTestCase(unittest.TestCase):def setUp(self):self.widget = Widget() def tearDown(self):self.widget = Nonedef testSize(self):self.assertEqual(self.widget.getSize(), (40, 40))def testReSize(self):self.widget.resize(20,30)self.assertEqual(self.widget.getSize(), (20, 30))def suite():suite = unittest.TestSuite()suite.addTest(WidgetTestCase("testSize"))suite.addTest(WidgetTestCase("testReSize"))return suiteif __name__ == "__main__": unittest.TextTestRunner().run(suite()) # If you use IDE to execute test script in an external console,# uncomment following code line.# while True# if raw_input("Type y or Y to close!") in ("y","Y"): sys.exit(0)
运行结果:python widget_unittest.py
$ python widget_unittest.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
动态方法不再覆盖runTest()方法,而是为测试类编写多个测试方法(按习惯这些方法通常以test开头),在创建TestCase子类的实例时必须给出测试方法的名称,来为PyUnit测试框架指明运行该测试用例时究竟应该调用测试类中的哪个方法.
如果用于测试的类中所有的测试方法都以test开,Python程序员甚至可以用PyUnit模块提供的makeSuite()方法来构造一个TestSuite:
defsuite():
returnunittest.makeSuite(WidgetTestCase,"test")
页:
[1]