其实在编程的过程中并不是只有写代码这一项工作,还有其它可能被忽略但是起到重要作用的工作,接下来就让我们一起来看看python中的测试,调试和版本控制。
1.Testing
为了确保一个软件能够按照我们设想的那样去运行并且产生正确的结果,对它进行专门的测试是必要的。在软件逐渐被开发的过程中有许多我们能应用在程序中的测试,比如:集成测试,回归测试,系统测试等等。最常见的测试之一是单元测试,也是我们主要要说的。
单元测试只关注软件很小的一部分,而不是整个程序,因此单元测试通常是我们测试流程的第一步。一旦我们确定这些部件能正常工作之后,我们就能去测试它们一起工作能否达到我们的要求。在python中用unittest模块可以很轻易地进行单元测试,它使我们能够使用类来测试一段程序,我们需要定义一个测试类,这样的类需要继承unittest中的TestCase,然后在这个类里面定义测试用例方法,并且不同的测试需要在不同的函数中进行,就像下面这样:
import unittest
class SampleTest(unittest.TestCase):
def test_equal(self): #以test开头
self.assertEqual(2 ** 3 - 1, 7)
self.assertEqual('Hello, world!', 'Hello, ' + 'world!')
def test_true(self):
self.assertTrue(2 ** 3 < 3 ** 2)
for x in range(10):
self.assertTrue(- x ** 2 <= 0)
如果我们想要运行这个测试,需要输入unittest.main(),结果如下:
>>> unittest.main()
test_equal (__main__.SampleTest) ... ok
test_true (__main__.SampleTest) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
如果是在jupyter notebook上面测试的话需要注意:
unittest.main(argv=[''], verbosity=2, exit=False)
unittest模块有两个用例前后置方法setUp()和tearDown(),在每一个用例开始和结束时都会运行它,在下面的练习中我们会用到。除此之外,还有测试类级别的前后置方法,是所有测试用例全部执行之前或之后只会执行一次的,分别是setUpClass和tearDownClass。在python中定义类方法要在前面写上@classmethod来声明一下。
2.Debugging
未完待续……