Глобальная переменная модуля Mocking при импорте - PullRequest
0 голосов
/ 12 июня 2018

Я пишу юнит-тесты для API, который подключается к MongoDB.В моем модуле API это выглядит так:

from flask import Flask, jsonify
from MyApp import MongoData

api = Flask(__name__)
DB_CONN = MongoData()

@api.route('/bla', methods=['GET'])
def alive():
    return jsonify({'response': true})

У меня проблема при импорте этого модуля в мой unittest.Я хочу смоделировать коллекцию из MongoData () со специальным классом, который использует mongomock.Проблема в том, что я не могу смоделировать DB_CONN при импорте в тестах:

from MyApp import api

Я пытался сделать это с помощью макета:

DB_CONN = MockMongoData()
with mock.patch('MyApp.api.DB_CONN', DB_CONN):
    from MyApp import api

, но он все еще пытается подключиться к базе данных какуказано в файле конфигурации.

Любой совет, как смоделировать DB_CONN из модуля MyApp.api?

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Это будет работать:

import sys    
from MyApp import MongoData, MockMongoData
sys.modules['MyApp'].MongoData = MockMongoData
from MyApp import api

Но есть ли лучший (более питонический) способ сделать это?

1 Ответ

0 голосов
/ 12 июня 2018

Сначала импортируйте модуль, а затем установите его члены:

DB_CONN = MockMongoData()

from MyApp import api

with mock.patch('MyApp.api.DB_CONN', DB_CONN):
    api.run()
...