質問

私は春のキャンプから来ました、私は春を使いたくありません、そしてJavaee6に移住していますが、私はDAO + JPAのテストに問題があります、ここに私の単純化されたサンプルがあります:

public interface PersonDao
{
  public Person get(long id);
}

これは非常に基本的な DAO です。私は Spring から来たので、DAO にはまだ価値があると信じているので、DAO レイヤーを追加することにしました。

public class PersonDaoImpl implements PersonDao , Serializable
{
  @PersistenceContext(unitName = "test", type = PersistenceContextType.EXTENDED)
  EntityManager entityManager ;

  public PersonDaoImpl()
  {
  }

  @Override
  public Person get(long id)
  {
    return entityManager .find(Person.class , id);
  }
}

これは JPA で実装された DAO です。EE コンテナまたはテスト コンテナが (Spring と同じように) EntityManager を注入できることを願っています。

public class PersonDaoImplTest extends TestCase
{
  @Inject 
  protected PersonDao personDao;

  @Override
  protected void setUp() throws Exception
  {
    //personDao = new PersonDaoImpl();
  }

  public void testGet()
  {
    System.out.println("personDao = " + personDao); // NULL !
    Person p = personDao.get(1L);
    System.out.println("p = " + p);
  }
}

これは私のテスト ファイルです。

さて、ここで問題が発生します。JUnit は @javax.inject.Inject を理解できないため、 PersonDao は注入できず、テストは失敗します。

EntityManager を PersonDaoImpl に注入し、 PersonDaoImpl を TestCase の PersonDao に @Inject できるテスト フレームワークを見つけるにはどうすればよいですか?

untils.org を試しましたが、このようなサンプルは見つかりません。EntityManagerFactory を TestCast に直接注入するだけで、私が望むものではありません...

役に立ちましたか?

解決

私は Spring から来たので、DAO にはまだ価値があると信じているので、DAO レイヤーを追加することにしました。

Spring がこれと何の関係があるのか​​よくわかりません。そして私は同意しません 前の回答で書いたように. 。私にとって、JPA は DAL (データ アクセス レイヤー) であり、データ アクセス レイヤーを別のデータ アクセス レイヤーの上に置く意味がわかりません。少なくとも体系的にはそうではありません。しかし、これについては議論しないでおこう。

これは JPA で実装された DAO です。EE コンテナまたはテスト コンテナが (Spring と同じように) EntityManager を注入できることを願っています。

DAO が CDI マネージド Bean のようなマネージド コンポーネントである場合、Java EE コンテナは EntityManager 初期化。

のために 単体テスト コンテナー管理オブジェクトの場合、いかなる種類のコンテナーも必要ありません。のために 統合テスト, Spring Bean、Hibernate/JPA エンティティ、セッション Bean、CDI 管理 Bean、またはその他の種類のコンテナ管理オブジェクトの場合と同様に、何らかの種類のコンテナが必要になります。あなたは出来る テストで EJB3.1 組み込み可能 API を使用する. 。こちらもご覧ください アルクイリアン.

他のヒント

また、その後PersonDaoImpl.setEntityManager(EntityManager em)でそれを設定し、メソッドPersistence.createEntityManagerFactory("test").createEntityManager()を追加することができます。 これは、Java EEコンテナと何もない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top