2017-11-21 8 views
1
@pytest.mark.parametrize("test_input,expected_output", data) 
def test_send_email(test_input, expected_output): 
    emails = SendEmails(email_client=MagicMock()) 
    emails.send_email = MagicMock() 
    emails.send_new_email(*test_input) 
    emails.send_email.assert_called_with(*expected_output) 

私は、send_new_emailメソッドで呼び出されたdatetime.datetime.now()を模倣しようとしています。私はそれを行う方法がわかりません。ユニットテスト中に

は私が、私はこの質問をした

TypeError: can't set attributes of built-in/extension type 'datetime.datetime'

エラーを取得する新しいDateTimeオブジェクト

datetime_object = datetime.datetime.strptime('Jun 1 2017 1:33PM', 
              '%b %d %Y %I:%M%p') 

を作成し、しかしdatetime.datetime.now

datetime.datetime.now = MagicMock(return_value=datetime_object) 

をオーバーライドしてみましたPythonの重複としてマークされている:datetime.date.today()をモックしようとしているが、動作していない

Python: Trying to mock datetime.date.today() but not working

私はすでにこのソリューションをしようとしたが、私はそれを動作させることができませんでした。私はプロジェクトの要件のためにfreezegunをインストールすることはできません。

私はテストファイルで

class NewDate(datetime.date): 
@classmethod 
def today(cls): 
    return cls(2010, 1, 1) 
datetime.date = NewDate 

を新しいクラスを作成しているしかし、私はこれを使用するためにSendEmailsクラスを取得する方法は考えています。

+0

これは既に重複しているとマークされたあなたの[最後の質問](https://stackoverflow.com/questions/47410854/mo​​ck-datetime-datetime-now)の再投稿と思われます。以前の質問と再投稿ではなく再オープンしようとしていますか? – EdChum

+0

私はその質問にコメントして編集しました。しかし、何も起こらなかった。ヘルプのコメントは新しい質問をするように言います。ちょうどstackoverflowが何をするのかに従ってください。 – user7692855

+0

ここでの問題は、これがカーボンコピーであることです。以前の質問を再開するために投票し、正確な複製を投稿しないようにする必要があります。 – EdChum

答えて

0

あなたは、クラス全体を置き換えることができます:

_FAKE_TIME = 0 
class _FakeDateTime(datetime.datetime): 
    @staticmethod 
    def now(): 
     return _FAKE_TIME 

、それを使用する:

_FAKE_TIME = whatever 
datetime.datetime = _FakeDateTime 

クラスは日時にFakeDateTimeが同等にするために、比較演算子のようないくつかの改良が必要ですが、それが必要作業。

関連する問題