代码之家  ›  专栏  ›  技术社区  ›  user1050619

模仿类与方法

  •  0
  • user1050619  · 技术社区  · 7 年前

    我想模拟python对象psycopg2来测试我的类。

    当我打印对象时- dir(conn) ,我看到connect、extras等都在列表中。

    conn = mock.MagicMock(psycopg2.connect)
    

    结果:

    ['BINARY', 'Binary', 'DATETIME', 'DataError', 'DatabaseError', 'Date',
    'DateFromTicks', 'Error', 'IntegrityError', 'InterfaceError',
    'InternalError', 'NUMBER', 'NotSupportedError', 'OperationalError',
    'ProgrammingError', 'ROWID', 'STRING', 'Time', 'TimeFromTicks',
    'Timestamp', 'TimestampFromTicks', 'Warning', '__builtins__',
    '__doc__', '__file__', '__libpq_version__', '__name__', '__package__',
    '__path__', '__version__', '__warningregistry__', '_connect', '_ext',
    '_ipaddress', '_json', '_psycopg', '_range', 'apilevel',
    'assert_any_call', 'assert_called', 'assert_called_once',
    'assert_called_once_with', 'assert_called_with', 'assert_has_calls',
    'assert_not_called', 'attach_mock', 'call_args', 'call_args_list',
    'call_count', 'called', 'configure_mock', 'connect', 'extensions',
    'extras', 'method_calls', 'mock_add_spec', 'mock_calls', 'paramstyle',
    'reset_mock', 'return_value', 'side_effect', 'threadsafety', 'tz',
    'warn']
    

    现在,当我想设置execute方法返回值的副作用时。

    conn.cursor().execute().side_effect = psycopg2.DatabaseError
    

    我得到了这个错误:

    AttributeError: Mock object has no attribute 'cursor'
    

    新代码:-

    pg = mock.MagicMock(psycopg2)
    print dir(pg())
    print dir(pg.connect)
    pg.connect()
    

    输出

    AttributeError: Mock object has no attribute 'cursor'
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   chepner    7 年前

    您需要配置 conn 康涅狄格州 它本身,因为你在嘲笑这个函数 connect .

    conn().cursor().execute().side_effect = psycopg2.DatabaseError