J'essaie d'effectuer des tests arquilliens sur un modèle de données enraciné dans l'API JSF. Je reçois cette erreur:Comment écrire des tests Arquillian pour les classes JSF
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.046 sec <<< FAILURE!
initializationError(mypackage.GenericLazyModelTest) Time elapsed: 0.003 sec <<< ERROR!
java.lang.ClassFormatError: Absent Code attribute in method that is not native
or abstract in class file javax/faces/model/DataModel
simples essais Arquillian, ne comportant pas JSF, mais JPA et les API EJB fonctionnent très bien.
La recherche sur le Web suggère qu'une raison commune à cela est l'utilisation des API EE de bout du soleil telles que décrites here et here.
Je ne les utilise définitivement pas. Voici la partie de la dépendance de mon pom
:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.bom</groupId>
<artifactId>jboss-javaee-6.0-with-tools</artifactId>
<version>${javaee6.with.tools.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.annotation</groupId>
<artifactId>jboss-annotations-api_1.1_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ws.rs</groupId>
<artifactId>jboss-jaxrs-api_1.1_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.1_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>1.1.1.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<scope>test</scope>
</dependency>
J'ai également essayé d'utiliser l'API interne JBoss JSF pour les tests sans effet sur l'erreur:
Mon modèle est dérivé des premières LazyDataModel
public class GenericLazyModel<T> extends LazyDataModel<T>
LazyDataModel
à son tour, est dérivé du javax.faces.model.DataModel
public abstract class LazyDataModel<T> extends DataModel<T> implements SelectableDataModel<T>, Serializable
Le test est presque vide, je requsting une injection de mon modèle et vérifier null
:
EDIT la ShrinkWrap l'initialisation inclut maintenant un faces-config.xml
, tel que proposé par stefanglase. N'a pas changé la sortie d'erreur cependant.
@RunWith(Arquillian.class)
public class GenericLazyModelTest {
@Deployment
public static Archive<?> createTestArchive() {
return ShrinkWrap
.create(WebArchive.class, "genericLazyModelTest.war")
.addClasses(GenericLazyModel.class, Submitter.class, SubmitterPK.class,
Ordering.class)
.addClasses(GenericDao.class, Resources.class)
.addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource(new StringAsset("<faces-config version=\"2.0\"/>"), "faces-config.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Inject
GenericLazyModel<Submitter> model;
@Before
public void before() {
Assert.assertNotNull(model);
model.setKlazz(Submitter.class);
}
Je l'exécute sur Jboss 7.1.0.Final.
Des idées sur ce qui pourrait être le problème et comment le résoudre?
Merci
Merci pour la recherche en elle. Cela m'a peut-être sauvé de plus de problèmes, mais malheureusement, cela n'a eu aucune influence sur ClassFormatError. Je vais éditer la question pour inclure les faces-config – kostja