2013-09-21 5 views
7

Я закончил курс обучения JPA по адресу http://arquillian.org/guides/testing_java_persistence/, но когда я попытаюсь запустить тест («Запустите тест на GlassFish», раздел руководства), как JUnit я получить следующие сообщения в консоли в Eclipse:Учебник Arquillian JPA: Не удалось создать новый экземпляр класса org.jboss.arquillian.test.impl.EventTestRunnerAdaptor

java.lang.RuntimeException: Could not create new instance of class org.jboss.arquillian.test.impl.EventTestRunnerAdaptor 
    at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:160) 
    at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:111) 
    at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:97) 
    at org.jboss.arquillian.test.spi.TestRunnerAdaptorBuilder.build(TestRunnerAdaptorBuilder.java:52) 
    at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:93) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:156) 
    ... 10 more 
Caused by: org.jboss.arquillian.container.impl.ContainerCreationException: Could not create Container glassfish-embedded 
    at org.jboss.arquillian.container.impl.LocalContainerRegistry.create(LocalContainerRegistry.java:85) 
    at org.jboss.arquillian.container.impl.client.container.ContainerRegistryCreator.createRegistry(ContainerRegistryCreator.java:76) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115) 
    at org.jboss.arquillian.core.impl.ManagerImpl.bindAndFire(ManagerImpl.java:236) 
    at org.jboss.arquillian.core.impl.InstanceImpl.set(InstanceImpl.java:74) 
    at org.jboss.arquillian.config.impl.extension.ConfigurationRegistrar.loadConfiguration(ConfigurationRegistrar.java:60) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115) 
    at org.jboss.arquillian.core.impl.ManagerImpl.start(ManagerImpl.java:261) 
    at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.<init>(EventTestRunnerAdaptor.java:56) 
    ... 15 more 
Caused by: java.lang.IllegalArgumentException: DeployableContainer must be specified 
    at org.jboss.arquillian.core.spi.Validate.notNull(Validate.java:44) 
    at org.jboss.arquillian.container.impl.ContainerImpl.<init>(ContainerImpl.java:71) 
    at org.jboss.arquillian.container.impl.LocalContainerRegistry.create(LocalContainerRegistry.java:76) 
    ... 39 more 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.arquillian.example</groupId> 
    <artifactId>arquillian-tutorial</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>arquillian-tutorial</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

    <dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.jboss.arquillian</groupId> 
      <artifactId>arquillian-bom</artifactId> 
      <version>1.1.1.Final</version> 
      <scope>import</scope> 
      <type>pom</type> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.8.5</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hamcrest</groupId> 
     <artifactId>hamcrest-integration</artifactId> 
     <version>1.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>net.avh4.util</groupId> 
     <artifactId>imagecomparison</artifactId> 
     <version>0.0.2</version> 
     <scope>test</scope> 
    </dependency> 
     <dependency> 
     <groupId>org.jboss.spec</groupId> 
     <artifactId>jboss-javaee-6.0</artifactId> 
     <version>1.0.0.Final</version> 
     <type>pom</type> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <!--<dependency> 
     <groupId>org.jboss.arquillian.container</groupId> 
     <artifactId>arquillian-weld-ee-embedded-1.1</artifactId> 
     <version>1.0.0.CR3</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.weld</groupId> 
     <artifactId>weld-core</artifactId> 
     <version>1.1.5.Final</version> 
     <scope>test</scope> 
    </dependency>--> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.6.4</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-jpamodelgen</artifactId> 
     <version>1.2.0.Final</version> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 
    <profile> 
     <id>arquillian-glassfish-embedded</id> 
     <activation> 
     <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
     <dependency> 
      <groupId>org.jboss.arquillian.container</groupId> 
      <artifactId>arquillian-glassfish-embedded-3.1</artifactId> 
      <version>1.0.0.CR3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.main.extras</groupId> 
      <artifactId>glassfish-embedded-web</artifactId> 
      <version>3.1.2</version> 
     </dependency> 
     </dependencies> 
     <build> 
     <testResources> 
      <testResource> 
      <directory>src/test/resources</directory> 
      </testResource> 
      <testResource> 
      <directory>src/test/resources-glassfish-embedded</directory> 
      </testResource> 
     </testResources> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
      <configuration> 
       <systemPropertyVariables> 
       <java.util.logging.config.file> 
        ${project.build.testOutputDirectory}/logging.properties 
       </java.util.logging.config.file> 
       <derby.stream.error.file> 
        ${project.build.directory}/derby.log 
       </derby.stream.error.file> 
       </systemPropertyVariables> 
      </configuration> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
</project> 

arquillian.xml

<?xml version="1.0" encoding="UTF-8"?> 
<arquillian xmlns="http://jboss.org/schema/arquillian" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
     http://jboss.org/schema/arquillian 
     http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 
    <container qualifier="glassfish-embedded" default="true"> 
     <configuration> 
      <property name="resourcesXml"> 
       src/test/resources-glassfish-embedded/glassfish-resources.xml 
      </property> 
     </configuration> 
    </container> 
</arquillian> 

Game.java

package org.arquillian.example; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 

@Entity 
public class Game implements Serializable { 
    private Long id; 
    private String title; 

    public Game() {} 

    public Game(String title) { 
     this.title = title; 
    } 

    @Id @GeneratedValue 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @NotNull 
    @Size(min = 3, max = 50) 
    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    @Override 
    public String toString() { 
     return "[email protected]" + hashCode() + "[id = " + id + "; title = " + title + "]"; 
    } 
} 

GamePersistenceTest.java

package org.arquillian.example; 


import java.util.List; 
import javax.inject.Inject; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.transaction.UserTransaction; 
import org.jboss.arquillian.container.test.api.Deployment; 
import org.jboss.arquillian.junit.Arquillian; 
import org.jboss.shrinkwrap.api.Archive; 
import org.jboss.shrinkwrap.api.ShrinkWrap; 
import org.jboss.shrinkwrap.api.asset.EmptyAsset; 
import org.jboss.shrinkwrap.api.spec.WebArchive; 
import org.junit.runner.RunWith; 
import org.junit.Before; 
import org.junit.After; 
import java.util.List; 
import org.junit.Test; 
import java.util.Arrays; 
import java.util.Collection; 
import java.util.HashSet; 
import java.util.Set; 
import org.junit.Assert; 
import javax.persistence.criteria.CriteriaBuilder; 
import javax.persistence.criteria.CriteriaQuery; 
import javax.persistence.criteria.Root; 


@RunWith(Arquillian.class) 
public class GamePersistenceTest { 
    @Deployment 
    public static Archive<?> createDeployment() { 
     return ShrinkWrap.create(WebArchive.class, "test.war") 
      .addPackage(Game.class.getPackage()) 
      .addAsResource("test-persistence.xml", "META-INF/persistence.xml") 
      .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); 
    } 

    private static final String[] GAME_TITLES = { 
     "Super Mario Brothers", 
     "Mario Kart", 
     "F-Zero" 
    }; 

    @PersistenceContext 
    EntityManager em; 

    @Inject 
    UserTransaction utx; 

    // tests go here 

    @Before 
    public void preparePersistenceTest() throws Exception { 
     clearData(); 
     insertData(); 
     startTransaction(); 
    } 

    private void clearData() throws Exception { 
     utx.begin(); 
     em.joinTransaction(); 
     System.out.println("Dumping old records..."); 
     em.createQuery("delete from Game").executeUpdate(); 
     utx.commit(); 
    } 

    private void insertData() throws Exception { 
     utx.begin(); 
     em.joinTransaction(); 
     System.out.println("Inserting records..."); 
     for (String title : GAME_TITLES) { 
      Game game = new Game(title); 
      em.persist(game); 
     } 
     utx.commit(); 
     // clear the persistence context (first-level cache) 
     em.clear(); 
    } 

    private void startTransaction() throws Exception { 
     utx.begin(); 
     em.joinTransaction(); 
    } 
    @After 
    public void commitTransaction() throws Exception { 
     utx.commit(); 
    } 

    private static void assertContainsAllGames(Collection<Game> retrievedGames) { 
     Assert.assertEquals(GAME_TITLES.length, retrievedGames.size()); 
     final Set<String> retrievedGameTitles = new HashSet<String>(); 
     for (Game game : retrievedGames) { 
      System.out.println("* " + game); 
      retrievedGameTitles.add(game.getTitle()); 
     } 
     Assert.assertTrue(retrievedGameTitles.containsAll(Arrays.asList(GAME_TITLES))); 
    } 

    @Test 
    public void shouldFindAllGamesUsingCriteriaApi() throws Exception { 
     // given 
     CriteriaBuilder builder = em.getCriteriaBuilder(); 
     CriteriaQuery<Game> criteria = builder.createQuery(Game.class); 

     Root<Game> game = criteria.from(Game.class); 
     criteria.select(game); 
     // TIP: If you don't want to use the JPA 2 Metamodel, 
     // you can change the get() method call to get("id") 
     criteria.orderBy(builder.asc(game.get(Game_.id))); 
     // No WHERE clause, which implies select all 

     // when 
     System.out.println("Selecting (using Criteria)..."); 
     List<Game> games = em.createQuery(criteria).getResultList(); 

     // then 
     System.out.println("Found " + games.size() + " games (using Criteria):"); 
     assertContainsAllGames(games); 
    } 


} 
+0

вы решить этот вопрос? – Yauhen

+0

нет и на данный момент я пытаюсь настроить JPA-JTA на среду Java EE –

+0

благодарю вас за ответ. Я потратил много времени на настройку gradle + arquillian + embedded glassfish, но, к сожалению, не нашел правильного решения для запуска моих тестов. – Yauhen

ответ

4

pom.xml проекта имеет некоторые из профилей, как arquillian-Weld-ee- встроенный, встроенный arquillian-glassfish и arquillian-jbossas-managed. И ни один из них не активен по умолчанию, поэтому сделать работу Arquillian containerabab le, вам нужно сделать любой из этих профилей по умолчанию. проверьте следующее pom.xml

  ` <dependenies> 
       <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
<profiles> 
    <profile> 
     <id>arquillian-jbossas-embedded</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>org.jboss.spec</groupId> 
       <artifactId>jboss-javaee-6.0</artifactId> 
       <version>1.0.0.Final</version> 
       <type>pom</type> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.jboss.arquillian.container</groupId> 
       <artifactId>arquillian-weld-ee-embedded-1.1</artifactId> 
       <version>1.0.0.CR7</version> 
      </dependency> 
      <dependency> 
       <groupId>org.jboss.weld</groupId> 
       <artifactId>weld-core</artifactId> 
       <version>2.1.0.Final</version> 
       <scope>test</scope> 
      </dependency> 

      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-simple</artifactId> 
       <version>1.6.4</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
    <profile> 
     <id>arquillian-jbossas-managed</id> 
     <dependencies> 
      <dependency> 
       <groupId>org.jboss.spec</groupId> 
       <artifactId>jboss-javaee-6.0</artifactId> 
       <version>1.0.0.Final</version> 
       <type>pom</type> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
      <groupId>org.jboss.as</groupId> 
      <artifactId>jboss-as-arquillian-container-managed</artifactId> 
       <version>7.1.1.Final</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.jboss.arquillian.protocol</groupId> 
       <artifactId>arquillian-protocol-servlet</artifactId> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 

+0

где arquillian-jbossas-embedded? –

+0

«Если вы не используете jboss, тогда вы можете отметить любой другой профиль по умолчанию, и это должно работать –

Смежные вопросы