Skip to content

好用的 pytest

📅 6/9/2024

這篇文章是部落格的第一篇文章,要拿什麼題材作為開頭讓我思考了一陣子;

而最近剛好有機會更近一步認識 pytest 模組,且單元測試對於開發人員又有很大的幫助

那麼?! 這不就是很棒的題材了嗎?

單元測試基本介紹

首先單元測試的特點就如同其名,以單個函數或方法作為一個小單元進行測試

主要目的就是測試你每段完成的程式碼,能不能像你所預想的一樣順利執行並產生正確的結果

如果每個小單元都是正常的,那組合起來的功能大概也沒什麼問題

而以目前的工作經驗,我認為單元測試有下面幾個優點

  1. 即早發現程式碼問題
  2. 模擬各項情境的輸入和產出
  3. 能安心的重構別人程式碼

測試的方法

接著我們已 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,就可以基本驗證我們的程式碼執行起來沒有問題了