Skip to content

单元测试介绍

官方的代码质量控制教程 如果你习惯使用 TDD 的开发方式来实现你的功能, 那么你就不会对单元测试感到陌生

TDD 实现一个队列

请用 TDD 的开发方式, 实现一个队列

  1. 先写单元测试, 然后执行
  2. 执行后肯定是报错, 所以 测试 -> 实现 -> 测试 -> 实现 循环往复
  3. 写完一个测试, 实现一个功能, 最终代码全部实现的时候, 单元测试也有了
  4. 下次改完代码, 提交之前先跑测试, 就知道是否改坏了之前的功能
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)

Released under the MIT License.