一般的な Mock の使い方の中には次のものがあります: - メソッドにパッチを当てる - オブジェクトに対するメソッド呼び出しを記録する
HTTP接続できない環境でもテストできるようにしたい
テストコードを書く機会があり、結構苦労したのでまとめてみたいと思います。
ポイントはテスト対象モジュール内での外部ライブラリのimportの仕方にある。 from requests import Sessionとした場合、Sessionクラスはimportを実行したモジュール空間下に置かれる。
しかし、'置き換えたいモジュール名'で指定すべき内容が少しわかりづらいと思います。
以下のような、visaモジュールを使って外部の機器と通信を取るCommunicationクラスを例にとります。
- 属性self.can_printは、メソッド内で初期化しているため、外部からデータを与えられない - validate()メソッドは、内部でデータベースなどで複雑な処理をしているため、is_ok=Trueとなるデータを用意できない のため、validate()メソッドをモックに差し替えたいと考えています。