Не знаю, почему, но вот мой фрагмент кода:
stats_collector.py
class StatsCollector( object ) :
def __init__( self, user_id, app_id ) :
logging.info( "Stats: APP_ID = {0}, ID = {1}".format( app_id, user_id ) )
mydb.py
from namespacename.mylibname.stats_collector import StatsCollector
class Db( object ) :
# constructor/destructor
def __init__( self, dbname ) :
....
def beginTransaction( self, user_id, app_id ) :
logging.info( "Begin" )
self._stats = StatsCollector( user_id, app_id )
test_mylibname_mydb
from namespacename.mylibname.mydb import Db
from namespacename.mylibname.stats_collector import StatsCollector
@pytest.mark.mydb_temp
@mock.patch( 'namespacename.mylibname.stats_collector.StatsCollector')
def test_db_beginTransaction( mock_stats_collector ) :
db = Db( TEST_DB_NAME )
mock_stats_collector.return_value = mock.Mock()
db.beginTransaction( TEST_ID, TEST_APP_ID )
......
......
Я вижу свой журнал в моем stats_collector.__init__
- зачем мне это вводить?Разве когда внутри моего beginTransaction
я называю возвращаемое значение StatsCollector
MockObject, и я не вижу никаких журналов?
Структура выглядит так:
tests/
├── mylibname
│ ├── test_mylibname_mydb.py
namespacename/mylibname
├── stats_collector
│ ├── mylibname_stats_collector.py
│ ├── __init__.py
├── mydb
│ ├── mylibname_mydb.py
│ ├── __init__.py
**Редактировать **
Следуя советам по комментарию -
@mock.patch( 'namespacename.mylibname.mydb.StatsCollector')
def test_db_beginTransaction( mock_stats_init ) :
db = Db( TEST_DB_NAME )
db.beginTransaction( TEST_UUID, TEST_APP_ID )
print db._transaction
assert db._transaction is mock_stats_init
получает меня:
E AssertionError: assert <namespacename.mylibname.stats_collector.mylibname_stats_collector.StatsCollector object at 0x7f42d837b110> is <MagicMock name='StatsCollector' id='139925072008976'>
E + where <namespacename.mylibname.stats_collector.mylibname_stats_collector.StatsCollector object at 0x7f42d837b110> = <namespacename.mylibname.mydb.mylibname_mydb.Db object at 0x7f42d8365850>._transaction