Win+eclipse+Python3でのUnit testをやってみた

標準

タイトル通りの内容。環境は以下の通り。

Windows10

Eclipse4.6

Python3.7.0a1

事前にEclipseでpythonが動くことは確認済みの状態から始まります。環境構築から調べたい人はこの辺の記事を参考にしてください。

【Python】Windows+Eclipseで開発環境を構築する手順
eclipse + PyDevでPythonする。 – Qiita

なお、テスト駆動開発で説明してるので、意図的に失敗をしていますが、そういうもんだと思ってください。

 

 

まず、プロジェクト名を『test_check』で作成します。

作った『test_check』で右クリックし、新規>Pydevモジュールでモジュールを新たに作成。モジュール名は『test_hello』で。この時、どのテンプレートを使うかを聞かれるので、モジュール:Unittestを選択。

テンプレートを使ったので、ある程度必要なものが記述されています。今回は、全部削除して以下のコードを入力します。

import unittest
import hello_func

class TestHello(unittest.TestCase):

    def test_hello_zero(self):
        input_value = 1
        result = hello_func.hello_world(input_value)
        self.assertEqual(result, 0)

if __name__ == "__main__":
    unittest.main()

というわけで、テストコードができたので動かします。テストコードを動かすには、ビルドアイコン>実行>Pythonユニットテスト です。

実行すると以下のようになります。

はい、無事に失敗します。

エラーメッセージより、hello_funcモジュールが無いよと言ってることがわかります。作ってないので当然ですね。

というわけで作ります。以降、コンソールは別ウィンドウになりますが画像サイズ上の問題なので気にしないでください。

先ほどと同様にモジュール名は『hello_func』で作成します。今度はテンプレートを聞かれたときにモジュール:メインを選んでください。

hello_funcは以下のコードとします。

def hello_world(input_value):

    if input_value == 0:
        print("Hello world")
        return 0
    else:
        print("Hello another world")
        return 1

if __name__ == '__main__':
    hello_world(0)

作り終わったら再びtest_helloモジュールを開き、再度ユニットテストを動かします。

 

今回も無事に失敗します。ユニットテストでは、失敗すると赤いバーが表示されます。今回の失敗は、テスト結果が想定と異なっているのが原因です。

        result = hello_func.hello_world(input_value)
        self.assertEqual(result, 0)

test_hello_zero関数にある上記の部分がテスト内容となります。result=0ならば成功ですが、今回はそうなっていません。よって、上記のようにユニットテストでエラーが出力されます。

 

今度は、ユニットテストを通すためのコードに書き換えます。hello_funcのモジュールを以下のように書き換えてください。

def hello_world(input_value):

    if input_value == 0:
        print("Hello world")
        return 1
    else:
        print("Hello another world")
        return 0

if __name__ == '__main__':
    hello_world(0)

書き換えたら再度ユニットテストを動かします。

今回は成功です。赤いバーが緑に変わっています。

 

ユニットテストの詳しい使い方とかは、いろいろな書籍を読んでみてください。

コメントを残す

メールアドレスが公開されることはありません。