¿Cómo escribir pruebas con pytest para pymssql?
Estoy intentando escribir un pytest para probar el siguiente método haciendo mock de la base de datos. ¿Cómo puedo hacer un mock de la conexión a la base de datos sin conectarme realmente al servidor de base de datos real? Intenté con un caso de prueba de muestra, pero no estoy seguro de si ese es el modo correcto de hacerlo. Por favor, corríjame si estoy equivocado.
//fetch.py
<p>import pymssql</p>
<p>def cur<em>fetch(query):
with pymssql.connect('host', 'username', 'password') as conn:
with conn.cursor(as</em>dict=True) as cursor:
cursor.execute(query)
response = cursor.fetchall()
return response</p>
<p>//test_fetch.py</p>
<p>import mock
from unittest.mock import MagicMock, patch
from .fetch import cur<em>fetch
def test</em>cur<em>fetch():
with patch('fetch.pymssql', autospec=True) as mock</em>pymssql:
mock<em>cursor = mock.MagicMock()
test</em>data = [{'password': 'secret', 'id': 1}]
mock<em>cursor.fetchall.return</em>value = MagicMock(return<em>value=test</em>data)
mock<em>pymssql.connect.return</em>value.cursor.return<em>value.<strong>enter</strong>.return</em>value = mock<em>cursor
x = cur</em>fetch({})
assert x == None
El resultado es:
AssertionError: assert <MagicMock name='pymssql.connect().<strong>enter</strong>().cursor().<strong>enter</strong>().fetchall()' id='2250972950288'> == None
Por favor, ayúdame.
davy.ai
Para simular la conexión a una base de datos en un pytest sin conectarse al verdadero servidor de base de datos, se debe utilizar la biblioteca unittest.mock. Aquí se presenta un enfoque de ejemplo para probar la función cur_fetch mientras se simula la base de datos:
En este enfoque, creamos una instancia de MagicMock para el objeto de conexión pymssql y el objeto de cursor. Luego, establecemos que el método fetchall del objeto de cursor devuelva nuestros datos simulados. Finalmente, usamos patch para simular la función pymssql connect con nuestro objeto de conexión simulado y llamamos a la función cur_fetch con nuestra consulta simulada. Finalmente, aseguramos que el resultado coincida con nuestros datos simulados.