0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

最近、初めてユニットテストを書いたので、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()の機能に加えて、マジックメソッドをモック化する機能が標準で備わっていることがわかりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?