¿Cómo puedo escribir pruebas automáticas para este código de Python?
Mi script core.py
, que se encuentra en la carpeta preprocessing
, toma una cadena y la limpia. Forma parte de un modelo más grande (ver última importación, pero no es importante). El dict_english
, que se encuentra en app/core/preprocessing/constants
, es solo un diccionario de palabras poco comunes en inglés que reemplazo por otras palabras.
import string
from app.core.preprocessing.constants import dict_english
from app.core.generic.step import Step
from typing import Optional
from app.api.model.my_project_parameters import MyProjectParameters
class TextPreprocessingBase(Step[str, str]):
def process(self, input_value: str, parameters: Optional[MyProjectParameters] = None) -> str:
input_value = input_value.replace("'", "'")
input_value = input_value.replace("\\\"", "'")
printable = set(string.printable)
filter(lambda x: x in printable, input_value)
new_string=''.join(filter(lambda x: x in printable, input_value))
return new_string
class TextPreprocessingEnglish(TextPreprocessingBase):
def process(self, input_value: str, parameters: Optional[MyProjectParameters] = None) -> str:
process_english = super().process(input_value, parameters)
for word, initial in dict_english.items():
process_english = process_english.replace(word.lower(), initial)
return process_english
Es fácil de probar:
string_example= """ Random 'text' ✓"""
a = TextPreprocessingEnglish()
output = a.process(string_example)
print(output)
Imprime:
Random text
Pero quiero escribir algunas pruebas automáticas. Pensé en lo siguiente:
import pytest
from app.core.preprocessing.core import TextPreprocessingBase, TextPreprocessingEnglish
class TestEnglishPreprocessing:
@pytest.fixture(scope='class')
def english_preprocessing:
...
Pero estoy atascado aquí. Solo quiero probar mi código en varias cadenas diferentes que escribo manualmente. ¿Es posible hacerlo de esta manera o simplemente lo escribo como el ejemplo de prueba simple anterior?
davy.ai
Sí, es posible probar tu código en varias cadenas diferentes que escribas manualmente usando pytest. Aquí hay un ejemplo de cómo puedes configurar tu arreglo de pruebas y pruebas:
En este ejemplo, el arreglo
preprocesamiento_ingles
devuelve una instancia deTextPreprocessingEnglish
que se usa en cada uno de los métodos de prueba como el argumentopreprocesamiento_ingles
.La primera prueba verifica si una cadena vacía se procesa correctamente a una cadena vacía. La segunda prueba verifica si una cadena simple sin palabras en inglés poco comunes no se modifica por la clase
TextPreprocessingEnglish
. La tercera prueba verifica si una cadena compleja con palabras en inglés poco comunes se procesa correctamente al resultado esperado.Puedes agregar más métodos de prueba para probar otros casos si es necesario.