次のクラス(DataStructureTest)コードを使用して簡単なテストを実行しようとしています。
public class DataStructureTest extends DatabaseTestCase {
private static final Log log = (Log) LogFactory.getLog(DataStructureTest.class);
@Test
public void testProductData(){
//Creating a product data
log.debug("Creating new product data");
ProductData productData = new ProductData("Öljy");
//Setting basic information of product
log.debug("Setting basic information like name, price, description "
+ "and amount.");
productData.setProductPrice(4.13);
productData.setProductDescription("Öljy rekoille.");
productData.setProductAmount(20);
//Saving entity
EntityManager em = getEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(productData);
Integer primarykey = productData.getId();
tx.commit();
//Reading entity from database
log.debug("Reading entity data from database.");
tx = em.getTransaction();
tx.begin();
productData = em.find(ProductData.class, primarykey);
tx.commit();
//Asserting that the product data was correct in database
Assert.assertEquals("Product name was correct", "Öljy",
productData.getProductName());
Assert.assertEquals("Product price was correct", 4.13,
productData.getProductPrice());
Assert.assertEquals("Product description was correct", "Öljy rekoille",
productData.getProductDescription());
Assert.assertEquals("Product amount was incorrect", 21,
productData.getProductAmount());
}
}
DatabaseTestCaseクラスコードは次のとおりです。
public class DatabaseTestCase {
/**
* This method establishes Entity Managerin before every test
* and writes information into log.
*/
private static final Log log = LogFactory.getLog(DatabaseTestCase.class);
private EntityManager entityManager;
private EntityManagerFactory entityManagerFactory;
@Before
public void establishEntityManager(){
log.debug("Establishing database connection!");
entityManagerFactory = Persistence.createEntityManagerFactory("warehouseTestPersistence", null);
entityManager = entityManagerFactory.createEntityManager();
}
@After
public void closeEntityManager(){
if(entityManager != null){
entityManager.close();
} else {
log.warn("Entity was empty (null) in tests.");
}
}
public EntityManager getEntityManager(){
return entityManager;
}
/**
* @param entityManager the entityManager to set
*/
public void setEntityManager(final EntityManager entityManager) {
this.entityManager = entityManager;
}
/**
* @return the entityManagerFactory
*/
public EntityManagerFactory getEntityManagerFactory() {
return entityManagerFactory;
}
/**
* @param entityManagerFactory the entityManagerFactory to set
*/
public void setEntityManagerFactory(final EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
}
/**
* Save entity to database. Used for assisting in tests.
* @return primary key for specific entity.
*/
protected Integer saveEntity(Entityclass entity){
EntityManager em = getEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(entity);
tx.commit();
return entity.getId();
}
/**
* Load entity from save location.
* @param <T>
* Generic class.
* @param entityclass
* Entity class of entity that is going to be loaded.
* @param primarykey
* Entity class primary key.
* @return correspondant entity.
*/
protected <T extends Entityclass> T loadEntity(final Class<T> entitysclass, final Integer primarykey){
EntityManager em = getEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
T entity = em.find(entitysclass, primarykey);
tx.commit();
return entity;
}
}
NetBeans7.0.1を使用しています。両方のクラスのすべてのインポートは適切に行われます。また、必要なすべての依存関係を追加しました。しかし、テストを実行すると、次の結果が得られます。
-エラーフィールド-
テストに合格しませんでした。1つのテストでエラーが発生しました。(0,075秒)com.mysite.warehouseapp.DataStructureTestが失敗しましたtestProductDataでエラーが発生しました:クラスの実装
クラスjava.lang.IncompatibleClassChangeErrorat.... at com.mysite.warehouseapp.test.DatabaseTestCase.establishEntityManager(DatabaseTestCase.java:36)の実装
-テスト結果フィールド-
- データベース接続を確立しています!
- テストでエンティティが空(null)でした。
上部にテスト結果の画像が表示されている場合、それがどのようにしてそこに到達したかはわかりませんが、この場所にあるはずです。
だから私がテストを実行しようとするときはいつでもエンティティはないと簡単に言った。誰か教えてもらえますか?私はこの問題の解決策を4日間見つけようとしましたが、それでも運がありません。どんな助けでも大歓迎です。
ありがとう