0

2 つのオブジェクトにパッチを適用する必要がある関数の 1 つに UT を書いています。

@patch('mypackage.models.db_models.MongoClient',
       return_value={})
@patch('mypackage.models.db_models.GridFS')
def test_file_in_db(self, mock_mongoclient, mock_gridfs):
    print "*"*80
    print mock_gridfs
    print mock_gridfs.return_value
    print "*"*80
    mock_gridfs.return_value.new_file.return_value = {}

これによりエラーが発生します:

----------------------------------------------------------------------
Traceback (most recent call last):
  File "/venv/lib/python2.7/site-packages/mock/mock.py", line 1305, in patched
    return func(*args, **keywargs)
  File "/tests/models/test_db_models.py", line 29, in test_file_in_db
    mock_gridfs.return_value.new_file.return_value = {}
AttributeError: 'dict' object has no attribute 'new_file'
-------------------- >> begin captured stdout << ---------------------
********************************************************************************
<MagicMock name='MongoClient' id='4385486992'>
{}
********************************************************************************

--------------------- >> end captured stdout << ----------------------

2 番目の引数にアクセスしているときに、オブジェクトをmock_gridfs返す理由を意味します。MockMongoClient

4

1 に答える 1

1

それらを間違った順序で持っています。定義した逆の順序でパラメータを配置してください。

@patch('mypackage.models.db_models.MongoClient',
       return_value={})
@patch('mypackage.models.db_models.GridFS')
def test_file_in_db(self, mock_gridfs, mock_mongoclient):
于 2016-06-24T22:35:54.897 に答える