【问题标题】:Mocking some fixtures inside a test在测试中模拟一些固定装置
【发布时间】:2023-03-11 11:01:02
【问题描述】:

我想在测试和测试检索的固定装置中模拟 timezone.now。

def time_to_test():
    return datetime(year=2019, month=4, day=30, hour=6, minute=2, second=3)

我试试:

with patch('django.utils.timezone.now', side_effect=time_to_test):
    @pytest.mark.django_db
    def test_only_one(user_helpers, user):
        print(django.utils.timezone.now()) # Here is mocked timezone
        print(user_helpers.created_time) # Here is real time
        assert user_helpers.count == 4

@patch('django.utils.timezone.now', side_effect=time_to_test):
@pytest.mark.django_db
def test_only_one(user_helpers, user):
    print(django.utils.timezone.now()) # Here is mocked timezone
    print(user_helpers.created_time) # Here is real time
    assert user_helpers.count == 4

模拟值未应用于夹具,因为它们在开始测试之前调用,但我希望仅在此测试中修补此夹具。

我不想为测试创建区分夹具或结构。

【问题讨论】:

    标签: python django mocking pytest fixtures


    【解决方案1】:

    没有简单的方法来解决它! 例如,您可以在 freezegunpytest-freezegun 上看到它是如何工作的 Freezegun 使用 sqlite db 保存当前上下文并在装饰器或上下文管理器完成后恢复它。

    简单的答案是:

    @pytest.mark.freeze_time('2019-04-18')
    @pytest.mark.django_db
    def test_only_one(user_helpers, user):
        print(django.utils.timezone.now()) # Here is mocked timezone
        print(user_helpers.created_time) # Here is real time
        assert user_helpers.count == 4
    

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 2011-01-29
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 2010-11-02
      • 1970-01-01
      相关资源
      最近更新 更多