2010-10-20 17 views
2

Je pensais essayer Spring Roo, donc j'ai eu beaucoup de nouveaux problèmes amusants aujourd'hui. J'espère que vous pourrez m'aider avec le dernier. Roo a la capacité de générer des tests d'intégration pour vos entités, mais la plupart d'entre elles échouent pour moi. L'échec le plus commun est une forme de violation de contrainte comme null est inséré dans des champs non null. Je réalise qu'il n'y a rien sur mon entité qui reflète ces contraintes dans la base de données.Tests d'intégration Roo - FAILURE

Par exemple, l'entité propriété dispose d'un grand nombre à une relation avec terme

//bi-directional many-to-one association to Term 
    @ManyToOne 
@JoinColumn(name="TERM_ID",) 
private Term term; 

Changing qui à:

//bi-directional many-to-one association to Term 
@ManyToOne(optional=false) 
@JoinColumn(name="TERM_ID", nullable=false) 
private Term term; 

provoque encore l'échec du test donc pas sûr si Roo est intelligent assez pour créer une entité terme automatiquement.

Donc, ma question est de savoir si je peux modifier ces tests générés sans Roo les écraser au redémarrage? Ou Roo devrait-il pouvoir définir des valeurs non nulles?

Il n'y a vraiment pas beaucoup de documentation sur les tests d'intégration et ce que vous pouvez faire avec les classes générées n'importe où. Que je pouvais trouver au moins :)

Merci

Répondre

1

Je suis tombé moi-même sur ce problème. Bien que cette question date de deux ans, j'espère que la question de départ a également trouvé une solution maintenant. J'espère que ma réponse aide les autres.

Apparemment, Roo utilise la validation de JSR 303 au lieu des contraintes JPA afin de générer des tests d'intégration corrects. JPA impose des contraintes sur la base de données, mais pas sur la logique de l'application. Pour permettre à Roo de générer des tests d'intégration corrects, vous devez également spécifier la même contrainte que la logique d'application. Pour avoir les deux, il suffit d'utiliser les annotations de JPA et JSR 303.

... 
import javax.validation.constraints.NotNull; 
.... 

@ManyToOne(optional=false) 
@JoinColumn(name="TERM_ID", nullable=false) 
@NotNull 
private Term term;