Sto usando spring mvc e ho Hibernate Validator nei miei domini, e ho alcuni test che passano in eclissi, ma non in console (usando gradle).Diversi tipi di eccezioni mentre eseguo test sia di eclissi che di console?
In eclissi ho installato solo java-7-openjdk-i386
, ma nella console io uso java version "1.8.0_25"
, non so se questo ha qualcosa con.
Parte del mio dominio è:
@Entity
@Table(name = "users", uniqueConstraints = {
@UniqueConstraint(columnNames = "username"),
@UniqueConstraint(columnNames = "email") })
public class User {
@NotNull
@Pattern(regexp = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])")
@Column(name = "email")
private String email;
@NotNull
@Size(min = 6, max = 15)
@Column(name = "username")
private String username;
@NotNull
@Column(name = "role")
private String role;
...
}
Per le prove, io uso Junit4 e un database embedded (HSQL), (per l'applicazione web che uso MySQL). Alcuni dei miei test, che gettano le eccezioni sono:
@Test(expected=javax.validation.ConstraintViolationException.class)
public void userEmailMustBeValid() {
User p = new User("jdoemail.com", "John", "Doe", "johndoe", "johndoe", "USER_ROLE");
userService.create(p);
}
@Test(expected=javax.validation.ConstraintViolationException.class)
public void userEmailCanNotBeNull() {
User p = new User(null, "John", "Doe", "johndoe", "johndoe", "USER_ROLE");
userService.create(p);
}
@Test(expected=javax.validation.ConstraintViolationException.class)
public void userUsernameShouldBeNotNull() {
User p = new User("[email protected]", "John", "Roe", null, "johnroe", "USER_ROLE");
userService.create(p);
}
@Test(expected=javax.validation.ConstraintViolationException.class)
public void userRoleShouldBeNotNull() {
User p = new User("[email protected]", "John", "Roe", "johnroe", "johnroe", null);
userService.create(p);
}
Così, per la prima prova userEmailMustBeValid
c'è un assertionError
perché si aspetta un'eccezione che non si verifica, il che significa che il @Pattern(..)
non funziona affatto. E per il resto dei test l'errore è:
Unexpected exception, expected<javax.validation.ConstraintViolationException> but was<org.hibernate.exception.ConstraintViolationException>
E il HSQL
DB e Hibernate sono configurati in questo modo:
<jdbc:embedded-database id="dataSource" type="HSQL">
<jdbc:script location="classpath:/config/schema.sql"/>
<jdbc:script location="classpath:/config/test-data.sql"/>
</jdbc:embedded-database>
<!-- Hibernate session factory -->
<beans:bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<!-- Annotated hibernate clasess -->
<beans:property name="packagesToScan" value="org.munaycoop.taskmanager.domains"/>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</beans:prop>
<beans:prop key="hibernate.show_sql">true</beans:prop>
<beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
Allora, che cosa è sbagliato?
Solo per curiosità ... perché stai utilizzando Pattern per convalidare la posta elettronica? Il validatore di Hibernate ha l'annotazione '@ Email' per validare il formato della posta elettronica. –
@BohuslavBurghardt non lo sapeva, grazie –