1

我想用 pytest 测试我的 tornado python 应用程序。

为此,我想为 mongo 提供一个模拟数据库,并使用电机“假”客户端来模拟对 mongodb 的调用。

我找到了很多 pymongo 的解决方案,但不是motor

任何想法?

4

1 回答 1

0

我不清楚你的问题——为什么不只使用硬编码的 JSON 数据?如果您只想拥有一个可以模拟以下内容的课程:

from motor.motor_tornado import MotorClient

client = MotorClient(MONGODB_URL) 
my_db = client.my_db
result = await my_db['my_collection'].insert_one(my_json_load)

所以我建议创建一个类:

Class Collection():
   database = []

   async def insert_one(self,data):
       database.append(data)
       data['_id'] = "5063114bd386d8fadbd6b004" ## You may make it random or consequent
       ...
       ## Also, you may save the 'database' list to the pickle on disk to preserve data between runs 
       return data
   async def find_one(self, data):
       ## Search in the list
       return data

   async def delete_one(self, data_id):
       delete_one.deleted_count = 1
       return

## Then create a collection:
my_db = {}
my_db['my_collecton'] = Collection()

### The following is the part of 'views.py' 
from tornado.web import RequestHandler, authenticated
from tornado.escape import xhtml_escape

class UserHandler(RequestHandler):
   async def post(self, name):
        getusername = xhtml_escape(self.get_argument("user_variable"))
        my_json_load = {'username':getusername}
        result = await my_db['my_collection'].insert_one(my_json_load)
        ...
        return self.write(result)

如果你能澄清你的问题,我会制定我的答案。

于 2021-05-30T20:24:51.930 回答