-1
私はmain関数で構築されたクラスをスタブアウトして、mainに対してテストを行い、クラスが特定のデータで初期化されることを宣言しました。しかし、主な機能は依然として嘲笑されたインスタンスを拾わない。どのように私は嘲笑されたインスタンスに沿ってメインに渡すことができます。pythonのmainメソッドへの魔法の擬似参照を渡す方法
from unittest.mock import patch
from contextlib import contextmanager
@contextmanager
def use_mocked(method, cls, ret_value):
class MockedClass(cls):
pass
def func(cls):
return ret_value
def fullname(o):
return o.__module__ + "." + o.__name__
setattr(MockedClass, method, classmethod(func))
with patch(fullname(cls), MockedClass):
yield
これは、メインが擬似参照を渡されていることを確認するためのパッチユーティリティです。私はその機能の仕方について私の理解に混乱するかもしれません。メインモジュールで
def test_main():
magic_b = MagicMock(spec_set=Benchmark, wraps=Benchmark)
with use_mocked("__new__", DataStream, magic_b):
main.main()
magic_b.assert_called_once_with() # fails
、Iのように定義mainメソッドを持っている...
import benchmark.Benchmark
def main():
b = benchmark.Benchmark() # <- this is not the mocked instance
...