2017-08-08 73 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()的補丁來解決這個問題,但我不`噸知道如何正確地做到這一點。

謝謝。

+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

非常感謝! –