私はdatetime.now()の出力を模擬して時間の流れをシミュレートしようとしています。ここで私がやろうとしているものです:Mocking datetime.now(); mockオブジェクトがクラスとして認識されない
from datetime import datetime, timedelta
from mock import Mock, patch
from other_module import some_code
tomorrow = Mock(spec=datetime)
tomorrow.now = Mock(return_value=datetime.now() + timedelta(days=1))
with patch('other_module.datetime', tomorrow):
some_code()
これはsome_code()
は、具体的には、datetime.datetime
のサブクラスであることを入力して確認してdatetime.datetime
クラスを取るライブラリ、croniterを、使用している以外、正常に動作します。これは私が走っている問題です。 datetime.datetimeはクラスですが、私のモックはそうではありません。 issubclass
メソッドではクラス型として認識されません。
モックオブジェクトがクラスとして認識されるようにするにはどうすればよいですか?
あなたのunittestsをどのように構成しているのかは分かりませんが、技術的には、あなたがunittestに影響しないように、クロニターから呼び出すクラス/メソッドを模倣する必要があります。あなたの目標は 'some_code()'を呼び出す動作をテストすることです。 – idjaw
これは可能な解決策だと思いますが、これは単体テストではなく、統合テストの一部なので、できるだけ少ないものを嘲笑しようとしています – syntacticmarmalade
統合テストの模擬は非常に奇妙なようです。いくつかの時間制約を強制する統合テストに役立つ時間を操作しようとしていますか? – idjaw