インフラエンジニアのためのCode Commitで覚えるユニットテスト

スタートプラン

私のようなインフラエンジニアの中にはPythonに興味があるかたが多いように感じています。 本記事では、Code Commitに絡めてPythonのユニットテストに関係する2点を紹介し、ユニットテストやCode Commitの利用イメージをお伝えします。

  1. Pythonでプログラムを作成、テストし、オリジンにpushする流れ
  2. 機能追加してプルリクエストする流れ

電卓プログラムの作成

足し算機能を持つ電卓プログラムを作成します。 作成したプログラムをテストし、オリジンにpushします。

Code Commitでリポジトリを作成

リポジトリの作成

Code Commitのコンソールに接続し、リポジトリを作成します。 リポジトリ名はpython-calculatorとしました。

リポジトリのクローン

リポジトリを作成すると、git cloneする手順が表示されます。 大きく以下の手順になります。

  1. IAMユーザーに公開鍵を登録
  2. SSH 設定ファイルにCode Commitへの接続情報を記載
  3. ローカルにクローンを作成する

クローンに成功すると、ローカルに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やユニットテストの理解に役立てば幸いです。

参考

スタートプラン