概要
- pull request をした時に GutHub Action でユニットテストを試してみます。
テストコードを準備
- python の unittest を使用します
- https://docs.python.org/ja/3/library/unittest.html?highlight=test#module-unittest
階層
.
|- sample.py
|- tests - test_sample.py
|- .github - workflows - unit_test.yml
- 簡単な関数を作ります
sanple.py
def add_num(num1, num2):
return num1 + num2
-
add_num
に対してユニットテストを準備します
test_sample.py
import unittest
import sample
class TestSample(unittest.TestCase):
def test_add_num(self):
result = sample.add_num(2, 3)
self.assertEqual(5, result)
- テストを実行してみる (
tests
配下のテストを実行するコマンド)
python -m unittest discover tests
結果
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
GitHub Actions のファイルを準備する
- トリガーは
pull request
一応workflow_dispatch
を定義して手動でも行える様にしました - https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows
unit_test.yml
name: unittest sample
on:
pull_request:
workflow_dispatch:
jobs:
unittest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: setup python
uses: actions/setup-python@v2
with:
python-version: '3.8'
architecture: 'x64'
- name: get python version
run: python -V
- name: unittest for python
run: python -m unittest discover tests
GitHub Actions を実行
プルリクを作成すると、GitHub Actions が実行されます。下の画像が実行結果です。
ユニットテストが失敗するパターンを試してみます。
ユニットテストが失敗しても、マージ保護がないと、マージ出来てしますので、保護します。
- settings -> branches -> Add rule
- Require status checks to pass before merging にチェックを入れる
- GitHub Actions の jobs 名をセットする
これで、テスト失敗したコードが Default ブランチへマージされることを防げる様になるみたいです。