《flask-web开发》一书中 12章测试 时间错乱的问题

新手上路,请多包涵

问题描述

flask web 开发一书中 关于Follow的章节的单元测试
测试案例如下

    def test_follow(self):
        timestamp_before = datetime.utcnow()
        u1 = User(username="u1", password="cat")
        u2 = User(username="u2", password="dog")
        db.session.add_all([u1, u2])
        db.session.commit()
        self.assertFalse(u1.is_following(u2))
        self.assertFalse(u2.is_followed_by(u1))
        u1.follow(u2)
        # db.session.add(u1)
        db.session.commit()
        timestamp_after = datetime.utcnow()
        self.assertTrue(u1.is_following(u2))
        self.assertTrue(u2.is_followed_by(u1))
        self.assertFalse(u1.is_followed_by(u2))
        self.assertTrue(u1.followed.count() == 1, msg="u1.followed.count() = {}".format(u1.followed.count()))
        self.assertTrue(u2.followers.count() == 1)
        f = u1.followed.all()[-1]
        print(u1.followed.all())
        self.assertTrue(f.followed == u2)
        self.assertTrue(timestamp_before <= f.timestamp <= timestamp_after,
                        msg="before:{0},f:{1},after{2}".format(timestamp_before, f.timestamp, timestamp_after))

f.timestamp为f对象创建时default设置的utcnow()
根据代码 实现先后顺序应为timestamp_before <= f.timestamp <= timestamp_after,但最终的运行结果如下

AssertionError: False is not true : before:2019-04-20 16:35:07.943151,f:2019-04-20 16:35:07.106793,after2019-04-20 16:35:08.725704

百思不得其解,怎么f的创建时间能比进入这个函数的时间还早?

阅读 921
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进