flamapy / flamapy_fw

This repository hosts the main components of flamapy
4 stars 5 forks source link

Metamorphic testing CI integration #38

Closed jagalindo closed 3 years ago

jagalindo commented 3 years ago

Create a repository for complex testing. Metamorphic, random generation, simple tests

Integrar esos tests queue ha implementado @German en el sistema de CI

Mmirar tambien en integrar los test de fIDE de @jmhorcas https://github.com/jmhorcas/famapy-aafms/tree/main/tests

Virako commented 3 years ago

¿Los test de @GermanMT cuales son, https://github.com/diverso-lab/benchmarking ? Quizás sea interesante moverlos al propio core o a alguno de los plugins si encajan bien.

Los test de @jmhorcas, he estado mirando y podemos mover: test_configuration al core y test_godelization en el fm_metamodel. Los de test_featureIDE_parser, como hacen referencia a los plugin de pysat y de fm, quizás podamos moverlo a pysat aunque sea necesario añadir como dependencia fm

jmhorcas commented 3 years ago

Los de test_godelization no son necesarios porque no se ha integrado esa funcionalidad.

En el caso de test_featureIDE_parser serían necearios los propios modelos que usan los tests.

jagalindo commented 3 years ago

Buenas. Los test de @jmhorcas podemos desjarlos para una release en sept. De momento lo ideal sería poder ejecutar al menos los tests (unit-testing) situados en la https://github.com/diverso-lab/benchmarking

Virako commented 3 years ago

Esta tarea la he dejado hecha en la rama develop del repo https://github.com/diverso-lab/benchmarking

Ya he añadido las github actions con el linter y la ejecución de test.

Por otra parte, comento varias cosas que he visto para que vayamos mejorando el código y sigamos todo lo posible la guía de estilo de python:


import pytest

from famapy.metamodels.fm_metamodel.transformations.xml_transformation import XMLTransformation
from famapy.metamodels.pysat_metamodel.transformations.fm_to_pysat import FmToPysat
from famapy.metamodels.pysat_metamodel.models.pysat_model import PySATModel
from famapy.metamodels.pysat_metamodel.operations.glucose3_core_features import Glucose3CoreFeatures

PATH_CORE_FEATURES = 'models/fama_test_suite/error-guessing/core-features/'

def core_features_operation(model: PySATModel, expected_output: list):
    core_features_operation = Glucose3CoreFeatures()
    core_features_operation.execute(model)
    core_features = core_features_operation.get_core_features()
    assert core_features == expected_output

def load_model(model_path):
    xmlreader = XMLTransformation(model_path)
    fm = xmlreader.transform()

    transform = FmToPysat(fm)
    return transform.transform()

@pytest.mark.parametrize(('filepath', 'expected_output'), [
    (f'{PATH_CORE_FEATURES}case1/cf-case1.xml', ['A', 'B']),
    (f'{PATH_CORE_FEATURES}case2/cf-case2.xml', ['A','B']),
    (f'{PATH_CORE_FEATURES}case3/cf-case3.xml', ['A','B','C']),
    (f'{PATH_CORE_FEATURES}case4/cf-case4.xml', ['A','B','C','E']),
    (f'{PATH_CORE_FEATURES}case5/cf-case5.xml', ['A','B','C','D']),
    (f'{PATH_CORE_FEATURES}case6/cf-case6.xml', []),
])
def test_core_feature(filepath, expected_output):
    pysat_model = load_model(filepath)
    core_features_operation(pysat_model, expected_output)