TDD Boot Camp 2020のFizzBuzz問題をPythonでやってみた

こんにちは。ハロです。

少し前に和田卓人さんの TDD Boot Camp 2020 Online #1 基調講演/ライブコーディング を見てから、どうしてもテスト駆動開発できるようになりたい!と思い、なんとかPythonでテストできるようになりました。

というわけで、Pythonでテスト駆動開発するための初歩を記事にまとめたので、よかったら参考にしてください。

環境構築

上のリンクから動画を見ると分かりますが、和田さんはJava環境(IDEはEclipseだと思います)でJUnit5を使っています。私はPython修行中の身なので、Python環境でpytestを使うことにしました。まずはテストできるところまで、次のようにして環境を整えます。

はじめに、今回のプロジェクト用にディレクトリを作ってそこへ移動します。

~ $ mkdir tddbc2020
~ $ cd tddbc2020/

続いて、仮想環境を有効にするとともに、pipを更新します。

~/tddbc2020 $ python3 -m venv .venv
~/tddbc2020 $ source .venv/bin/activate
(.venv) ~/tddbc2020 $ pip install -U pip

最後に、pytestをインストールしてひとまず環境構築は終わりです。

(.venv) ~/tddbc2020 $ pip install pytest

ソースファイルとテストファイルの作成

和田さんの講演を見て、ソースファイルとテストファイルをPythonで作ります。

(.venv) ~/tddbc2020 $ vim fizzbuzz.py
(.venv) ~/tddbc2020 $ vim test_fizzbuzz.py

ソースファイルはこちら。

class FizzBuzz:

    def convert(self, num):
        if num % 15 == 0:
            return "FizzBuzz"
        elif num % 3 == 0:
            return "Fizz"
        elif num % 5 == 0:
            return "Buzz"
        else:
            return str(num)

テストファイルはこちら。

import pytest

from fizzbuzz import FizzBuzz


@pytest.fixture
def fizzbuzz():
    fizzbuzz = FizzBuzz()
    yield fizzbuzz


def test_convert_num1_to_str1(fizzbuzz):
    assert "1" == fizzbuzz.convert(1)


def test_convert_num2_to_str2(fizzbuzz):
    assert "2" == fizzbuzz.convert(2)


def test_convert_num3_to_fizz(fizzbuzz):
    assert "Fizz" == fizzbuzz.convert(3)


def test_convert_num5_to_buzz(fizzbuzz):
    assert "Buzz" == fizzbuzz.convert(5)


def test_convert_num15_to_fizzbuzz(fizzbuzz):
    assert "FizzBuzz" == fizzbuzz.convert(15)

テストの実行

pytestを使ってテストを実行します。

(.venv) ~/tddbc2020 $ pytest
=============================== test session starts ===============================
platform linux -- Python 3.6.9, pytest-6.1.1, py-1.9.0, pluggy-0.13.1
rootdir: /home/user/tddbc2020
collected 5 items

test_fizzbuzz.py .....                                                       [100%]

================================ 5 passed in 0.03s ================================

感想

テスト駆動開発のゴール「動作するきれいなコード」を目指して、一歩を踏み出せた気がします。

pytestを使うことで、かなり手軽にテスト駆動開発を始められるということが分かってもらえたら嬉しいです。

またね。

この記事を書いた人

ハロ

ハロ

学究の兎です。コンピュータサイエンス全般が好きで、ある時はハンダごてを握って電子回路を作ってみたり、またある時は新しいプログラミング言語を覚えて嬉々としてキーボードを叩いていたりします。