【发布时间】:2014-02-01 11:37:47
【问题描述】:
我正在尝试使用 arquillian-persistence-impl 1.0.0.ALPHA6 测试从数据库加载国家/地区的单例启动 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;
}
}
我还尝试在我的 dao entityManager 上使用 @PersistenceContext 注释,结果相同。
我使用 jboss AS 7.1.1 作为测试容器。
任何想法为什么我的 DAO entityManager 找不到我的测试数据?
【问题讨论】:
-
因为测试数据还不存在。执行测试时插入测试数据,而不是之前。
-
非常感谢约翰!而已。我将在下面发布我的解决方案。
标签: java jpa junit entitymanager jboss-arquillian