单元测试介绍
官方的代码质量控制教程 如果你习惯使用 TDD 的开发方式来实现你的功能, 那么你就不会对单元测试感到陌生
TDD 实现一个队列
请用 TDD 的开发方式, 实现一个队列
- 先写单元测试, 然后执行
- 执行后肯定是报错, 所以
测试
->实现
->测试
->实现
循环往复 - 写完一个测试, 实现一个功能, 最终代码全部实现的时候, 单元测试也有了
- 下次改完代码, 提交之前先跑测试, 就知道是否改坏了之前的功能
py
# 文件: queue.test.py
# 执行: python queue.test.py
import unittest
from queue import Queue
class TestQueue(unittest.TestCase):
def test_init(self):
q = Queue()
self.assertTrue(isinstance(q, Queue))
def test_enqueue(self):
q = Queue()
self.assertEqual(q.size(), 0)
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
self.assertEqual(q.size(), 3)
def test_dequeue(self):
q = Queue()
q.enqueue(1)
q.enqueue(2)
self.assertEqual(q.size(), 2)
v = q.dequeue()
self.assertEqual(q.size(), 1)
self.assertEqual(v, 1)
v = q.dequeue()
self.assertEqual(q.size(), 0)
self.assertEqual(v, 2)
def test_clear(self):
q = Queue()
q.enqueue(1)
q.enqueue(2)
self.assertEqual(q.size(), 2)
q.clear()
self.assertEqual(q.size(), 0)
def test_is_empty(self):
q = Queue()
self.assertTrue(q.is_empty())
q.enqueue(1)
self.assertFalse(q.is_empty())
q.dequeue()
self.assertTrue(q.is_empty())
if __name__ == "__main__":
unittest.main()
py
# 文件: queue.py
# 队列: 一种受限的线性结构数据
# 特点: 先进先出
# 注意: 可迭代协议就不实现了,重点是单元测试
class Queue:
def __init__(self):
self.__items = []
# 入列
def enqueue(self, value):
self.__items.insert(self.size(), value)
# 出列
def dequeue(self):
return self.__items.pop(0)
# 清除队列
def clear(self):
self.__items.clear()
# 队列是否为空
def is_empty(self):
return self.size() == 0
# 队列的长度
def size(self):
return len(self.__items)