manuales_desarrollo

Manuales de desarrollo de YeboYebo


Project maintained by yeboyebo Hosted on GitHub Pages — Theme by mattgraham

Testing / Valores por defecto y ficheros mother

Para generar de forma ágil datos de prueba usaremos las clases Mother y MotherApi. Estos clases fabrican objetos con valores por defecto y automatizan la generación de identificadores de registros.

Ejemplo de fichero mother: ArticuloMotherApi.py

from sistema.libreria.contexts.shared.test.EntityMotherApi import EntityMotherApi

# @class_declaration Oficial */
class Oficial(EntityMotherApi):
    _referencia = 0

    @classmethod
    def default(cls, data={}):
        return {
            "referencia": cls.get_next_referencia(),
            "descripcion": "Artículo de test",
            "pvp": 10,
            **data
        }

    @classmethod
    def iva_reducido(cls, data={}):
        return {
            **cls.default(),
            "codimpuesto": "RED",
            **data
        }

    @classmethod
    def get_next_referencia(cls):
        cls._referencia += 1
        return str(cls._referencia).zfill(10)


# @class_declaration ArticuloMotherApi */
class ArticuloMotherApi(Oficial):
    pass

En este ejemplo vemos que, si no especificamos la referencia del artículo, la clase nos devolverá un autonumérico con ceros a la izquierda.

Uso de clases Mother en los tests

Podemos usar estas clases para construir modelos de qsa o clases de dominio. En el caso de los MotherApi, contamos además con una función create en la librería T3ST que podemos llamar para crear una entidad en base de datos a través de unos datos generados por un fichero mother.

factura = self.lib.api_create("formfacturascli_api",
    FacturaClienteMotherApi.default())

Inicialización de referencias por defecto en cada fichero test

A veces sucede que, por ejemplo, para un fichero de test de facturas de cliente, queremos que cuando llame a FacturaClienteMotherApi.default(), la factura creada se asocie a un determinado cliente, y a un determinado artículo.

De esta forma, a menos que cambie los parámetros de la llamada a la clase mother, sabré cómo serán todas las facturas que creo en los tests del fichero.

Para ello, cada clase MotherApi tiene una propiedad default_id que podemos establecer para indicar qué identificador usar cuando necesitemos una instancia de la entidad asociada al Mother.

En la función carga_estaticos de cada fichero de test, haremos algo similar a esto:

ref_gen_10 = self.lib.api_create("formarticulos_api",
    (ArticuloMotherApi.default())
ArticuloMotherApi.default_id = ref_gen_10

Con esto indico que cada vez que un fichero mother necesite en su interior referenciar a un artículo existente por defecto, se el artículo que acabamos de crear.

Más