💬

【テスト_2日目】単体テスト1冊目

2024/09/07に公開

こんにちは投資ロウトです。

背景

チームメンバーに自動テストのレクチャーをしていくことにしました。
※チームメンバーが自動テストができるようになるのがゴールです。
※週一の会議に向けての資料となるため、週一でこちらの単元は更新しようか検討しております。

単体テストには、古典学派とロンドン学派がある

・古典学派・・・テスト駆動開発の元来の取り組みを採用

・ロンドン学派・・・ロンドンのプログラミング・コミュニティーで生まれている
→テスト対象となるクラスが他のクラスに依存しているのであれば、依存をテスト・ダブルに置き換える必要がある。テストダブルを用いると、複雑な依存関係を解消できる。

単体テストの定義

以下の全てを兼ね備えている必要がある。

・単体の少量のコードを検証
・実行時間が短い
・隔離された状態で実行

・古典派のテスト実行(Python)
古典派インスタンスを用意して実行するとのこと。

# 準備
store = Store(initial_stock=100)
customer = Customer(name="John Doe")

# 実行
customer.purchase_books(store, 50)

# 確認
assert store.get_stock() == 50

・ロンドン学派のテスト実行(Python)
→インスタンスはモックに変更し、テストを実行する

from unittest.mock import MagicMock

# Storeクラスのモックを作成
mock_store = MagicMock()

# 準備
customer = Customer(name="John Doe")

# モックの振る舞いを定義
mock_store.sell_books.return_value = True

# 実行
customer.purchase_books(mock_store, 50)

# 確認
mock_store.sell_books.assert_called_once_with(50)

隔離の違い

古典学派はテストダブルを使ってテストを実施していますが、ロンドン学派は一度に一つのクラスしか検証を行わないといった制約がある。
※ロンドン学派はクラスを全てモックしているため。

古典学派は、単体テストでは、隔離するのはテストケースであり、各テストケースをお互いに影響を与えることなく、個別に実行できるようにしなければならないと言うような記載がありました。

各学派のメリット等

ロンドン学派

(メリット)
・細かい粒度で検証が可能
→1クラスずつしか検証しないため、細かいテストが可能。
・複雑な依存関係でも問題なく検証可能
・テスト失敗時の調査が楽

テスト駆動開発

テスト駆動開発・・・テストが正しいと言う前提で、開発を進めていく開発手法

統合テスト(E2E)

統合テスト・・・さまざまなチームで開発されたコードが、統合された状態で想定通り動作すること。
→E2Eテストは、コストがかかるテストのため、単体テストやE2Eテストが成功した後に行う必要があるとのことでした。

と一旦以上で学習を区切りたいと思います。チームメンバーのスキルアップが図れるように、焦らずコツコツ自分のペースで頑張っていきたいと思います。ご精読ありがとうございました。

Discussion