1
/
5

-Qiita記事Part.45-新人エンジニアがmocker.Mock()とMagicMock()の違いについて調べたのでメモ

こんにちは、ナイトレイインターン生の保科です。
Wantedlyをご覧の方に、ナイトレイのエンジニアがどのようなことをしているか知っていただきたく、Qiitaに公開している記事をストーリーに載せています。

今回はエンジニアの船津さんの記事です。
少しでも私たちに興味を持ってくれた方は下に表示される募集記事もご覧ください↓↓


最近、初めてユニットテストを書いたので、python のテストフレームワークに登場するmocker.Mock()とMagicMock()の違いについて調べてみました。

ざっくりとした違い

mocker.Mock()とMagicMock()は、それぞれ異なるテストフレームワークに由来します。mocker.Mock()はpytestの一部であり、MagicMock()はunittestの一部です。

そもそもmockとは?

モック(mock)とは、テストに必要な部品を擬似的に再現するために用いられます。これにより、テスト対象コードで呼び出しているメソッドや外部ライブラリの機能をモック化し、テスト対象コードの外部依存を排除して適切なテストを行うことができます。

また、モック化に使用するテストフレームワークのクラス自体をモックと呼ぶこともあるため、文脈に応じて注意が必要です。

pytestとunittest

では、mocker.Mock()とMagicMock()について見ていきます。それぞれのオブジェクトが所属するテストフレームワークにも触れていきます。

pytest- mocker.Mock()

pytestは、サードパーティ製のpythonのテストフレームワークです。後に紹介する、標準ライブラリのunittestよりも使い勝手が良い(らしい)ので、pytestを使ってテストを書くことが多いようです。

mockerとは、pytest-mockライブラリの一部であり、pytestと共に使用されることが多いようです。pytest-mockは、pytestのためのモッキングツールを提供し、その中のmockerで、Mock()が利用されます。

mocker.Mock()は、pytest-mockによって提供されるモックオブジェクトです。

unittest -MagicMock()

unittestはPythonの標準ライブラリであり、Pythonに組み込まれているテストフレームワークです。使いやすさや機能の点でpytestに劣ることがあるため、主にMagicMock()はunittest.mockモジュールから提供されるモックオブジェクトです。Mock()クラスの拡張で、特定のマジックメソッド(例えば__getitem____setitem____iter__など)を標準でモック化する機能を持っています。

結論

mocker.Mock()とMagicMock()は、それぞれ異なるテストフレームワークに由来しており、MagicMock()はmocker.Mock()の機能に加えて、マジックメソッドをモック化する機能が標準で備わっていることがわかりました。

Invitation from 株式会社ナイトレイ
If this story triggered your interest, have a chat with the team?
株式会社ナイトレイ's job postings
1 Likes
1 Likes

Weekly ranking

Show other rankings
Like 保科 汐里's Story
Let 保科 汐里's company know you're interested in their content