python - pytest 没有看到模拟

标签 python python-3.x unit-testing pytest

我有一个描述实体的类,我正在尝试编写单元测试来检查某些字段是否默认为正确的值。其中一个字段使用 datetime.now()设置默认状态。
我在尝试模拟对 now() 的调用时遇到问题在我的测试中。我猜这与我的文件夹结构有关。

src
    classes
        MyClass.py
pytests
    test_MyClass.py
MyClass 定义:
from datetime import datetime
class MyClass:
    def __init__(self):
        self.mom = datetime.now()
我使用@mock.patch 如下(在 test_MyClass.py 中):
import pytest
import sys

from unittest import mock    
sys.path.append(r'C:\python-projects\test\src')
from classes.MyClass import MyClass
@mock.patch('classes.MyClass.datetime.now', return_value = 'timestamp', autospec = True)
@pytest.fixture
def myclass():
    myclass = MyClass()
    yield myclass
    
def test_has_datetime(myclass):
    assert myclass.mom == 'timestamp'
测试忽略补丁。

最佳答案

尝试这个:

  • 确保您在 src 中有 __init__.py 文件, classespytests目录;
  • 删除 sys.path.append(r'C:\python-projects\test\src')
  • 在@mock.patch 中,替换 classes.MyClass.datetime.nowsrc.classes.MyClass.datetime.now
  • 制作 C:\python-projects\test\当前工作目录并运行 pytest ./pytests

  • 否则,使用 freezegun 之类的包可以更轻松地模拟 datetime 模块。 :https://github.com/spulec/freezegun

    关于python - pytest 没有看到模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66853066/

    相关文章:

    python - 如何合并列表以获得列表列表?

    python - Python如何计算数字?

    python-3.x - 对 Tornado 使用elasticsearch_async

    python-3.x - PyTorch - Torchvision - BrokenPipeError : [Errno 32] Broken pipe

    c# - Synchronization.Context 在 Post 上为 null 但在 Send 上不为空

    python - 元音查找器,错误 : list index out of range

    python - 是否可以为方法定义 sphinx 文档提供单独的新行

    python - 如何将one-hot向量转换为多标签?

    unit-testing - Grails Spock 单元测试需要模拟事务管理器

    unit-testing - 从 TestServer 测试 asp.net 5 vnext 中间件