unittest.mock モジュールを正しく使って関数を置き換えるというのは以外と難しいもので、Pythonの名前空間について、しっかり把握できてないとうまくいかないことがある。 単純なケースでは、テスト対象のコードが参照している名前で置き換えてやればいい。 例えば import spam def ham(): spam.egg() というモジュール M の ham() をテストするために spam.egg を置き換えるなら def test(): import M with patch("spam.egg"): M.ham() となる。また、 from spam import egg def ham(): egg() のように egg を参照している場合、ham() の内部での egg は M.egg への参照なので def test(): import M with patch("M