2016-08-29 5 views
0

Я пытаюсь запустить тест JUnit с Arquillian для моих классов обслуживания аннотированных в @Stateless, но это не работает ...Arquillian тест JUnit не работает

Тест @Deployment проход, но @test утверждения терпит неудачу с NullPointer Exception для инжектированных услуг:

@RunWith(Arquillian.class) 
public class GenericDaoTest { 
@Inject 
private EmployeeService employeeService; 

@Deployment 
public static JavaArchive createTestableDeployment() { 
    final JavaArchive jar = ShrinkWrap 
      .create(JavaArchive.class) 
      .addPackage("it.smartit.application.timesheet.service") 
      .addPackage("it.smartit.application.timesheet.service.impl") 
      .addAsManifestResource("META-INF/persistence.xml", 
        "persistence.xml") 
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") 
      .addPackage("it.smartit.application.timesheet.entity"); 
    return jar; 
} 

@Test 
public void should_crud() { 
    assertNotNull(employeeService); 
    Employee initialSize = employeeService.findById(new Integer(1)); 
} 
} 

Введенный сервис является: «Proxy для просмотра класса: EmployeeService из EJB: mployeeServiceImpl», и когда я пытаюсь вызвать метод, который он возвращает:

на первый я использовал dao, но я с jpa не полезен, поэтому теперь в servi се Я использую менеджер компании, но до сих пор не работает :(

@Local 
public interface GenericService<T, PK extends Serializable>{ 
    T findById(PK id); 
} 


@Stateless(name = "GenericServiceImpl", mappedName = "GenericServiceImpl") 
public class GenericServiceImpl<T, PK extends Serializable> implements 
    GenericService<T, PK> { 

@PersistenceContext(unitName = "timesheet") 
protected EntityManager entityManager; 

private Class<T> entityClass; 

public GenericServiceImpl() { 
} 

public GenericServiceImpl(Class<T> entityClass) { 
    this.entityClass = entityClass; 
} 

@Override 
public T findById(PK id) { 
    return entityManager.find(entityClass, id); 

} 

} 


public interface EmployeeService extends 
    GenericService<Employee,Integer> { 
} 


@Stateless(name = "EmployeeServiceImpl", mappedName = "EmployeeServiceImpl") 
public class EmployeeServiceImpl extends GenericServiceImpl<Employee,Integer> implements EmployeeService{ 

public EmployeeServiceImpl() { 
    super(Employee.class); 
} 

} 

Используя этот актив он вернуть эту ошибку:

javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:190) 

.... 
Caused by: org.jboss.arquillian.test.spi.ArquillianProxyException: org.h2.jdbc.JdbcSQLException : Table "EMPLOYEES" not found; SQL statement: 

выберите employee0_.employeed_id в employee1_3_0_, employee0_.address, как ....

Я использую Java EE 7 на Wildfly8 и Mysql

+0

Можете ли вы поделиться своими зависимостями? –

+0

Сообщение обновлено спасибо @ bartosz.majsak – antonio

ответ

0

Я считаю, что причиной этой проблемы является определение конфигурации базы данных.

Моя первая догадка будет то, что вы не установили свою ценность hibernate.hbm2ddl.auto создавать или создавать дроп в ваших persistence.xml так:

<property name="hibernate.hbm2ddl.auto" value="create-drop" /> 

Эта строка говорит зимовать (в этот случай) для создания таблиц базы данных при запуске и опускания их при завершении работы. Если вы не добавите эту строку, возможно, что таблицы не существуют в базе данных.

Если это не проблема, было бы полезно, если бы вы добавили свой класс Employee.

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