iT邦幫忙

2

【python內建模組- unitest】單元測試

開發程式時,除錯是一件相當麻煩的事情,
一個方法是針對程式一個個的小單元(如: 函數)進行驗證測試的工作,
稱為「單元測試」

基礎語法大致上如下:

import unittest

class Test(unittest.TestCase):

    def test_method1(self):
        pass
        
    def test_method2(self):
        pass
        
    ...
    
if __name__ == '__main__':
    unittest.main()

定義一個class繼承unittest.TestCase類別,
要測試的方法必須以test開頭

自己寫的例子

譬如說我寫了一個排序函數叫作quickSort
作用是把陣列由小排到大,
我想知道這個函數有沒有寫對,
大概就可以隨機生成陣列,
比較看看跟內建函數sorted()得到的結果是否相同

import unittest
import random

def partition(arr, front, end):
    pivot = arr[end]
    idx = front-1
    for j in range(front,end):
        if arr[j]<pivot:
            idx+=1
            arr[idx],arr[j]=arr[j],arr[idx]
    arr[idx+1],arr[end]=arr[end],arr[idx+1]
    return idx+1;

# 原地修改陣列
def quickSort(arr, front=0, end=None):
    if end==None:
        end=len(arr)-1
    if front<end:
        pivot = partition(arr, front, end);
        quickSort(arr, front, pivot-1);
        quickSort(arr, pivot+1, end);
    return arr

class Test(unittest.TestCase):

    def test_fixDatas(self):
        arr = [52,30,6,20,13]
        self.assertEqual(quickSort(arr), [6,13,20,30,52])

    def test_quickSort(self):
        for i in range(100):
            arr = [random.randint(-10000,10000) for i in range(1000)]
            copy = arr[:]
            self.assertEqual(quickSort(arr), sorted(copy)) 

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

assertEqual()是一種斷言,
判斷兩個物件是否相等,
如果不相等的話就錯了。

參考資料

  1. 單元測試
  2. python官方文檔 unittest --- 單元測試框架

尚未有邦友留言

立即登入留言