Esempio n. 1
0
    def test_set_now(self):
        """
        1. 重设 clock_engine 的时间
        2. 通过 mock 来重设时间戳
        3. mock 只能重设 time.time 函数的时间戳,但是不能重设 datetime.datetime.now 函数的时间戳,详情见: http://stackoverflow.com/questions/4481954/python-trying-to-mock-datetime-date-today-but-not-working
        4. 在代码中需要使用时间戳时,请通过 clock_engine 中的 now 或者 now_dt 接口获得,也可以使用 time.time 获得.否则该段代码将不适用于需要更改时间戳的单元测试
        :return:
        """
        tzinfo = tz.tzlocal()
        # 使用datetime 类构建时间戳
        now = datetime.datetime(2016, 7, 14, 8, 59, 50, tzinfo=tzinfo)

        # 通过mock ,将 time.time() 函数的返回值重设为上面的打算模拟的值,注意要转化为浮点数时间戳
        time.time = mock.Mock(return_value=now.timestamp())

        # 生成一个时钟引擎
        clock_engien = ClockEngine(EventEngine(), tzinfo)

        # 去掉微秒误差后验证其数值
        self.assertEqual(clock_engien.now, now.timestamp())  # time.time 时间戳
        self.assertEqual(clock_engien.now_dt, now)  # datetime 时间戳

        # 据此可以模拟一段时间内各个闹钟事件的触发,比如模拟开市9:00一直到休市15:00
        for _ in range(60):
            clock_engien.tock()
            now += datetime.timedelta(seconds=1)  # 每秒触发一次 tick_tock
            time.time = mock.Mock(return_value=now.timestamp())
            self.assertEqual(clock_engien.now,
                             now.timestamp())  # time.time 时间戳
            self.assertEqual(clock_engien.now_dt, now)  # datetime 时间戳
Esempio n. 2
0
    def test_set_now(self):
        """
        1. 重设 clock_engine 的时间
        2. 通过 mock 来重设时间戳
        3. mock 只能重设 time.time 函数的时间戳,但是不能重设 datetime.datetime.now 函数的时间戳,详情见: http://stackoverflow.com/questions/4481954/python-trying-to-mock-datetime-date-today-but-not-working
        4. 在代码中需要使用时间戳时,请通过 clock_engine 中的 now 或者 now_dt 接口获得,也可以使用 time.time 获得.否则该段代码将不适用于需要更改时间戳的单元测试
        :return:
        """
        tzinfo = tz.tzlocal()
        # 使用datetime 类构建时间戳
        now = datetime.datetime(2016, 7, 14, 8, 59, 50, tzinfo=tzinfo)

        # 通过mock ,将 time.time() 函数的返回值重设为上面的打算模拟的值,注意要转化为浮点数时间戳
        time.time = mock.Mock(return_value=now.timestamp())

        # 生成一个时钟引擎
        clock_engien = ClockEngine(EventEngine(), tzinfo)

        # 去掉微秒误差后验证其数值
        self.assertEqual(clock_engien.now, now.timestamp())  # time.time 时间戳
        self.assertEqual(clock_engien.now_dt, now)  # datetime 时间戳

        # 据此可以模拟一段时间内各个闹钟事件的触发,比如模拟开市9:00一直到休市15:00
        for _ in range(60):
            clock_engien.tock()
            now += datetime.timedelta(seconds=1)  # 每秒触发一次 tick_tock
            time.time = mock.Mock(return_value=now.timestamp())
            self.assertEqual(clock_engien.now, now.timestamp())  # time.time 时间戳
            self.assertEqual(clock_engien.now_dt, now)  # datetime 时间戳
Esempio n. 3
0
    def test_set_now(self):
        """
        重设 clock_engine 的时间
        :return:
        """

        tzinfo = tz.tzlocal()
        now = datetime.datetime.combine(
            self.trade_date,
            datetime.time(8, 59, 00, tzinfo=tzinfo),
        )
        clock_engien = ClockEngine(EventEngine(), now, tzinfo)

        # 去掉微秒误差后比较
        self.assertEqual(clock_engien.now_dt.replace(microsecond=0), now)
Esempio n. 4
0
    def test_reset_now(self):
        """
        重设时钟引擎当前时间为其他时间点
        :return:
        """
        tzinfo = tz.tzlocal()
        clock_engien = ClockEngine(EventEngine())
        now = datetime.datetime.combine(
            self.trade_date,
            datetime.time(8, 59, 00, tzinfo=tzinfo),
        )
        clock_engien.reset_now(now)

        # 去掉微秒误差后比较
        self.assertEqual(clock_engien.now_dt.replace(microsecond=0), now)

        # 重设为当前时间
        clock_engien.reset_now()
        now = datetime.datetime.now(tzinfo).replace(microsecond=0)

        # 去掉微秒误差后比较
        self.assertEqual(clock_engien.now_dt.replace(microsecond=0), now)