インフラエンジニアのためのCode Commitで覚えるユニットテスト
私のようなインフラエンジニアの中にはPythonに興味があるかたが多いように感じています。 本記事では、Code Commitに絡めてPythonのユニットテストに関係する2点を紹介し、ユニットテストやCode Commitの利用イメージをお伝えします。
- Pythonでプログラムを作成、テストし、オリジンにpushする流れ
- 機能追加してプルリクエストする流れ
電卓プログラムの作成
足し算機能を持つ電卓プログラムを作成します。 作成したプログラムをテストし、オリジンにpushします。
Code Commitでリポジトリを作成
リポジトリの作成
Code Commitのコンソールに接続し、リポジトリを作成します。 リポジトリ名はpython-calculatorとしました。
リポジトリのクローン
リポジトリを作成すると、git cloneする手順が表示されます。 大きく以下の手順になります。
- IAMユーザーに公開鍵を登録
- SSH 設定ファイルにCode Commitへの接続情報を記載
- ローカルにクローンを作成する
クローンに成功すると、ローカルにpython-calculatorディレクトリが作成されます。
電卓プログラムの作成
足し算の関数を作成し、calc.py
として保存します。
1 2 | def plus(x,y): return x + y |
足し算関数のユニットテスト
足し算関数のテストを行います。
testsディレクトリにテストファイル(test_calc.py)を配置します。
__pycache__
は自動で作成されます。
1 2 3 4 5 6 7 8 9 10 11 12 | $ tree . ├── __pycache__ │ └── calc.cpython-35.pyc ├── calc.py └── tests ├── __pycache__ │ └── test_calc.cpython-35.pyc └── test_calc.py 3 directories, 4 files $ |
test_calc.py
は以下のようにします。
assertEqualは第1引数と第2引数がイコールになるか確認します。
テストプログラムでは、calc.py
のplus関数に引数3と5を与えて、8になるか確認します。
ユニットテストフレームワークの詳細は公式ドキュメントをご覧ください。
1 2 3 4 5 6 | import unittest import calc class TestCalc(unittest.TestCase): def test_plus( self ): self .assertEqual(calc.plus( 3 , 5 ), 8 ) |
ユニットテストを実行すると、"OK"になります。
1 2 3 4 5 6 7 | $ python3 -m unittest tests.test_calc . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK $ |
「self.assertEqual(calc.plus(3,5), 8)」を「self.assertEqual(calc.plus(2,7), 10)」に変更して、テストを実行します。 2+7は9なので、テストに失敗します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ python3 -m unittest tests.test_calc F ====================================================================== FAIL: test_plus (tests.test_calc.TestCalc) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tests/test_calc.py" , line 6, in test_plus self.assertEqual(calc.plus(2,7), 10) AssertionError: 9 != 10 ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (failures=1) $ |
オリジンへのpush
オリジンにpushしましょう。
1 2 3 | git add ./* git commit -m "initial commit" git push origin master |
Code Commitコンソールに反映されていれば、成功です。
電卓プログラムへの機能追加
作成した電卓プログラムには、足し算の機能しかありません。 引き算の機能を追加、テストし、プルリクエストします。
devブランチの作成
開発用のdevブランチを作成します。
1 2 3 4 5 6 | $ git checkout -b dev Switched to a new branch 'dev' $ git branch * dev master $ |
引き算関数の追加
calc.py
に引き算関数(minus)を追加します。
1 2 3 4 5 | def plus(x,y): return x + y def minus(x,y): return x - y |
引き算関数のユニットテスト
引き算関数をテストします。
test_minus関数をtest_calc.py
に追加します。
10引く3をminus関数で実行し、7になるかをテストします。
1 2 3 4 5 6 7 8 | import unittest import calc class TestCalc(unittest.TestCase): def test_plus( self ): self .assertEqual(calc.plus( 3 , 5 ), 8 ) def test_minus( self ): self .assertEqual(calc.minus( 10 , 3 ), 7 ) |
ユニットテストを実行すると、OKになります。
1 2 3 4 5 6 7 | $ python3 -m unittest tests.test_calc .. ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK $ |
プルリクエストの作成
devブランチをオリジンにpushします。
1 2 3 | git add ./* git commit -m "add minus function" git push origin dev |
Code Commitコンソールに反映されます。
プルリクエストの作成
プルリクエストの作成を選択します。
devとmasterを比較します。 コンフリクトがなく、マージ可能なことがわかります。
変更内容が表示されます。 minus関数が追加されていることがわかります。
タイトル、説明を記載してプルリクエストを作成します。
プルリクエストのマージ
プルリクエストをマージします。
引き算機能(minus関数)がmasterに反映されました。
さいごに
Code Commitに絡めてPythonのユニットテストを紹介しました。 電卓プログラムに足し算の関数を作成して、ユニットテストを行いました。 テストに合格したプログラムはCode Commitにpushしました。
devブランチを作成し、引き算の関数を追加しました。 引き算についてもユニットテストを行い、合格したプログラムをプルリクエストしました。 Code Commitコンソールから、devとmasterの差分を確認し、マージしました。
本記事がCode Commitやユニットテストの理解に役立てば幸いです。