2017-08-08 10 views
1

私はWebアプリケーション用のユニットテストを書くため、モジュールのテストには関数待ち時間TIME_TO_WAITを変更する必要があります。コードの 例:正しくこれを行う方法を、datetime.timedelta.total_secondsにパッチを当てる

import time 
from datetime import datetime as dt 

def function_under_test(): 
    TIME_TO_WAIT = 300 
    start_time = dt.now() 
    while True: 
     if (dt.now() - start_time).total_seconds() > TIME_TO_WAIT: 
      break 
     time.sleep(1) 

は私がdatetime.timedelta.total_seconds()のパッチでこの問題を解決する方法を参照してください、しかし、私は知っている `tを。

ありがとうございました。

+0

をあなたはまた 'dt.now'クラスメソッドにパッチを当てることができます。そしておそらく 'time.sleep'も同様に機能しますので、待つ必要はありません。 – Kendas

答えて

0

私はコメントに書いたように - 私はそうのようなテスト実行の速度を制御するためにdttimeをパッチします:

from unittest import TestCase 
from mock import patch 
from datetime import datetime 

from tested.module import function_under_test 

class FunctionTester(TestCase): 

    @patch('tested.module.time') 
    @patch('tested.module.dt') 
    def test_info_query(self, datetime_mock, time_mock): 
     datetime_mock.now.side_effect = [ 
      datetime(year=2000, month=1, day=1, hour=0, minute=0, second=0), 
      datetime(year=2000, month=1, day=1, hour=0, minute=5, second=0), 
      # this should be over the threshold 
      datetime(year=2000, month=1, day=1, hour=0, minute=5, second=1), 
     ] 
     value = function_under_test() 
     # self.assertEquals(value, ??) 
     self.assertEqual(datetime_mock.now.call_count, 3) 
+0

ありがとうございました! –

関連する問題