Question

Je travaille avec de nombreuses classes annotées avec javax.persistence.Entity etc.Mon projet consiste à générer des métadonnées sur les classes annotées JPA plutôt que sur la persistance en elle-même, je les utilise donc comme cas de test.

Plutôt que de lancer Hibernate ou un autre fournisseur JPA, j'aimerais vérifier par programme - dans le cadre de mes tests unitaires - que mes déclarations JPA sont effectivement valides.

Quelle est la façon la plus simple de procéder ?

Était-ce utile?

La solution

Il suffit de créer le plus simple SessionFactory possible ou tout EclipseLink ou OpenJPA fournissent derrière le EntityManagerFactory et laissez-les valider (en utilisant une base de données factice en mémoire, le cas échéant). Il est trop complexe pour le réinventer.

Pour Hibernate cela peut être fait en utilisant Configuration.buildMappings:

@RunWith(Theories.class)
public class EntitiesAreValidTest {

    @DataPoints
    public static Class<?>[] entities = new Class[] {
        SimpleEntity.class,
        SimpleEntityWithTransientField.class,
        TwoFieldEntity.class
    };

    @Theory
    public void classHasValidConfiguration(Class<?> entityClass) {

        new AnnotationConfiguration().addAnnotatedClass(entityClass).buildMappings();
    }
}

Autres conseils

Quel est le problème sur l'utilisation d'un fournisseur JPA concret dans vos tests? En combinaison avec une base de données intégrée (par exemple Apache Derby), vous pouvez réutiliser la logique qui a en effet déjà été mis en œuvre. Une autre idée serait de vérifier les sources de EclipseLink, Hibernate, OpenJPA, ... pour voir si vous pouvez l'utiliser directement.

Je ne sais pas s'il y a un moyen plus facile, mais vous pouvez utiliser la réflexion pour accéder aux annotations d'une classe

Class class = Example.class;
Annotation[] annotations = class.getAnnotations();

Si vous ne faites pas confiance aux fournisseurs JPA (ou ne souhaitez pas les utiliser), essayez de réconcilier les annotations JPA (métadonnées) récupérées à l'aide de la réflexion avec les métadonnées JDBC récupérées à l'aide de ResultSetMetaData (voir par exemple ici).

Je ne veux pas dire que cela soit simple, mais avec la bonne approche, vous devriez disposer d'un ensemble plutôt compact de méthodes d'assistance pour vérifier les définitions de base de chaque entité.Et le kilométrage peut varier en fonction de la quantité de fonctionnalités JPA que vous souhaitez couvrir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top