私は Spring キャンプから来ました。Spring を使用したくありません。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 コンテナーまたはテスト コンテナーが EntityManager を注入できることを願っています (Spring のように)。
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);
}
}
これは私のテストファイルです。
OK 、ここで問題が発生します。JUnit は @javax.inject.Inject を認識しないため、PersonDao は注入できず、テストは失敗します。
EntityManager を PersonDaoImpl に注入し、 @Inject PersonDaoImpl を TestCase の PersonDao に注入できるテスト フレームワークを見つけるにはどうすればよいですか?
unitils.org を試しましたが、このようなサンプルが見つかりません。必要なものではなく、 EntityManagerFactory を TestCast に直接注入するだけです...