0

次のクラス(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日間見つけようとしましたが、それでも運がありません。どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

0

私は自分自身で解決策を見つけました。これは静かでやりがいがあります:)。とにかく、この問題の解決策は、persistence.xml が間違ったフォルダーにあることでした。また、初心者の方には、プロジェクト src/main/resources/META-INF/persistence.xml の次のフォルダーに persistence.xml を配置することをお勧めします。

src/test の下に resources/META-INF フォルダーを作成していない場合は、フォルダーを作成して、persistence.xml ファイルをそこに配置します。これが誰かに役立つことを願っています:)

私が見つけたもう1つのことは、互いに「反対」している異なるjarがある可能性があるため、それらのjarを取り出す必要があるということです。

于 2013-02-07T14:05:07.937 に答える