這篇文章是部落格的第一篇文章,要拿什麼題材作為開頭讓我思考了一陣子;
而最近剛好有機會更近一步認識 pytest 模組,且單元測試對於開發人員又有很大的幫助
那麼?! 這不就是很棒的題材了嗎?
單元測試基本介紹
首先單元測試的特點就如同其名,以單個函數或方法作為一個小單元進行測試
主要目的就是測試你每段完成的程式碼,能不能像你所預想的一樣順利執行並產生正確的結果
如果每個小單元都是正常的,那組合起來的功能大概也沒什麼問題
而以目前的工作經驗,我認為單元測試有下面幾個優點
- 即早發現程式碼問題
- 模擬各項情境的輸入和產出
- 能安心的重構別人程式碼
測試的方法
接著我們已 Leetcode 的題目來示範 pytest 吧
有題目有測資有解答真是再適合不過了,就以今天的題目來寫範例吧
974. Subarray Sums Divisible by K
python
class Solution:
def subarray_div_by_k(self, nums: list[int], k: int) -> int:
seen = {0: 1}
prefix_mod = 0
ans = 0
for num in nums:
prefix_mod = (prefix_mod + num) % k
if prefix_mod in seen:
ans += seen[prefix_mod]
seen[prefix_mod] += 1
else:
seen[prefix_mod] = 1
return ans
假設這是我們剛寫好的一個方法,接著就可以開始寫單元測試來試試看結果是否正確了
pytest
python
def test_solution():
nums = [4, 5, 0, -2, -3, 1]
k = 5
ans = 7
solution = Solution()
assert ans == solution.subarray_div_by_k(nums=nums, k=k)
我們先實例剛寫好的 Solution
類,接著執行其中的方法,最後透過斷言來判斷方法的結果是否如我們的預期是7
接著我們在 terminal 輸入 pytest
如果顯示綠色的pass,就可以基本驗證我們的程式碼執行起來沒有問題了