2014-12-24 41 views
5

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?

+2

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. –

+0

@BohuslavBurghardt non lo sapeva, grazie –

risposta

1

Un motivo possibile per l'errore di asserzione potrebbe essere un errore Java assert da qualche parte nel codice. Eclipse non funziona con asserzioni abilitate di default, mentre il processo di test Gradle lo fa.

Per confermare se questo è il problema, è possibile provare a disattivare le asserzioni in Gradle test, con l'aggiunta di questo nel vostro build.gradle del file:

test.enableAssertions = false 

PS: Si potrebbe voler esaminare la stacktrace un po 'di più per trova la fonte dell'errore di asserzione.

Problemi correlati