es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , ,

Answer

  1. Avatar for 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:

    class TestPreprocesamientoIngles:
        @pytest.fixture(scope='class')
        def preprocesamiento_ingles(self):
            return TextPreprocessingEnglish()
    
        def test_procesar_cadena_vacia(self, preprocesamiento_ingles):
            assert preprocesamiento_ingles.procesar('') == ''
    
        def test_procesar_cadena_simple(self, preprocesamiento_ingles):
            assert preprocesamiento_ingles.procesar('¡Hola, Mundo!') == '¡Hola, Mundo!'
    
        def test_procesar_cadena_compleja(self, preprocesamiento_ingles):
            cadena_entrada = 'Th3 qu1ck br0wn f0x jumps 0ver the lazy d0g.'
            cadena_esperada = 'The quick brown fox jumps over the lazy dog.'
            assert preprocesamiento_ingles.procesar(cadena_entrada) == cadena_esperada
    

    En este ejemplo, el arreglo preprocesamiento_ingles devuelve una instancia de TextPreprocessingEnglish que se usa en cada uno de los métodos de prueba como el argumento preprocesamiento_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.

Comments are closed.