Я пытаюсь проверить загрузку Bean Singleton Startup из базы данных с использованием arquillian-persistence-impl 1.0.0.ALPHA6.Arquillian Persistence - EntityManager в Startup Bean не находит тестовые данные
Если я запускаю тестовый класс и пытаюсь получить доступ к одному из наборов тестовых данных, предоставляемых через @UsingDataSet, все работает нормально.
Вот что Arquillian класс тест выглядит
@RunWith(Arquillian.class)
public class CountryDAOTest {
@Inject
CountryDAO dao;
@Produces
@PersistenceContext(unitName="test-pu")
EntityManager em;
@Inject
UserTransaction ut;
@Deployment
public static JavaArchive createDeployment() {
JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
.addClass(CountryDAO.class)
.addClass(UserTransaction.class)
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsManifestResource("jbossas-ds.xml")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
System.out.println(jar.toString(true));
return jar;
}
@Test
@UsingDataSet("db-data/countryDAOTest-country.yml")
@ShouldMatchDataSet("db-data/countryDAOTest-country-verify.yml")
public void getCountryFromDAO(){
TypedQuery<Country> query = em.createQuery("FROM Country", Country.class);
List<Country> newCountriesList = query.getResultList();
System.out.println("LOADED COUNTRIES IN TEST CLASS: "+newCountriesList.size());/*this works fine and returns 2 elements */
List<Country> daoCountry = dao.getCountries();
System.out.println("LOADED COUNTRIES FROM DAO: "+daoCountry.size()); /*this returns 0 elements */
}
}
Если я пытаюсь позвонить в базу данных через мой Singleton Startup CountryDAO не находит каких-либо данных в тестовой базе данных.
@Startup
@Singleton
public class CountryDAO {
@Inject
private EntityManager entityManager;
private List<Country> countries;
@PostConstruct
public void init(){
TypedQuery<Country> query = entityManager.createQuery("FROM Country", Country.class);
List<Country> newCountriesList = query.getResultList();
System.out.println("LOADED COUNTRIES ON POSTCONSTRUCT:"+newCountriesList.size()); /* returns 0 elements */
countries = Collections.unmodifiableList(newCountriesList);
}
public synchronized List<Country> getCountries(){
return countries;
}
}
Я также попытался использовать аннотацию @PersistenceContext для моего dao entityManager с тем же результатом.
Я использую jboss AS 7.1.1 в качестве тестового контейнера.
Любые идеи, почему мой судовой диспетчер DAO не находит мои тестовые данные?
Это потому, что тестовых данных еще нет. Данные теста вставляются при выполнении теста, а не раньше. –
Большое спасибо! Вот и все. Я отправлю свое решение ниже. – Vincent