我有一个类的以下代码库,它封装了与 mongodb 的交互以用于休息应用程序:
import contextlib
import os
from datetime import datetime
from typing import Any, Dict, List, Optional
import motor.motor_asyncio
from pymongo.errors import DuplicateKeyError
DB = "books"
BOOKS_COLLECTION = "books"
AUTHORS_COLLECTION = "authors"
GENRES_COLLECTION = "genres"
BACKEND: Optional["MongoBackend"] = None
class BookExistsException(Exception):
pass
class MongoBackend:
def __init__(self, uri: str) -> None:
self._client = motor.motor_asyncio.AsyncIOMotorClient(uri)
async def get_all_authors(self) -> List[Dict[str, Any]]:
cursor = self._client[DB][AUTHORS_COLLECTION].find({}, {"_id": 0})
return [doc async for doc in cursor]
async def get_all_genres(self) -> List[Dict[str, Any]]:
cursor = self._client[DB][GENRES_COLLECTION].find({}, {"_id": 0})
return [doc async for doc in cursor]
async def get_single_book_by_id(self, book_id: str) -> Dict[str, Any]:
return await self._client[DB][BOOKS_COLLECTION].find_one(
{"book_id": book_id}, {"_id": 0}
)
我想像mongomock
测试普通pymongo
代码一样使用它来测试它。但是我只是无法理解如何编写将创建类实例的夹具,因为我需要一些 URI,而且由于我们没有事件循环,我认为motor
会引发错误。
有人可以给我一些指示吗?可能只是对其中一种方法的简单测试,例如get_all_authors
现在可以做的。我检查了这个包pytest-async-mongodb
,但这似乎是一个开发版本,我认为它不是标准化的。
请求您提供一些关于如何使用电机等异步代码测试它的提示。提前致谢。