在测试中模拟一些固定装置
Mocking some fixtures inside a test
我想在测试和测试检索的固定装置中模拟 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
模拟值未应用于固定装置,因为它们在开始测试之前调用,但我只想在此测试中修补此固定装置。
我不想为测试创建可区分的夹具或结构。
没有简单的方法可以解决!
例如它是如何工作的,你可以在 freezegun and pytest-freezegun 上看到
Freezegun 使用 sqlite 数据库保存当前上下文并在装饰器或 context-manager 完成后恢复它。
简单的答案是:
@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
我想在测试和测试检索的固定装置中模拟 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
模拟值未应用于固定装置,因为它们在开始测试之前调用,但我只想在此测试中修补此固定装置。
我不想为测试创建可区分的夹具或结构。
没有简单的方法可以解决! 例如它是如何工作的,你可以在 freezegun and pytest-freezegun 上看到 Freezegun 使用 sqlite 数据库保存当前上下文并在装饰器或 context-manager 完成后恢复它。
简单的答案是:
@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