永続化エンジンとして Hibernate を使用して Play 2.0 で動作する自動テストを誰かが持っているかどうか疑問に思っていますか?
次のテストを試みていますが、次のエラーが発生します。
[error] Test tests.TestApp.findById failed: No EntityManager bound to this threa
d. Try to annotate your action method with @play.db.jpa.Transactional
[error] at play.db.jpa.JPA.em(JPA.java:45)
[error] at models.User.findById(User.java:72)
[error] at tests.TestApp$1.run(TestApp.java:55)
[error] at play.test.Helpers.running(Helpers.java:277)
[error] at tests.TestApp.findById(TestApp.java:51)
テストコードは次のとおりです。
@Test
public void findById()
{
running(fakeApplication(), new Runnable()
{
public void run()
{
User user = User.findById(21l);
assertThat(user.getName()).isEqualTo("Dave");
}
});
}
@Transactional アノテーションをテスト メソッドに追加しようとしましたが、これは効果がありません。
次に、現在の JPA スレッドにバインドするセットアップ メソッドとティアダウン メソッドを追加しようとしましたが、これでもうまくいきませんでした。私がそれを正しく行っているかどうかはわかりませんが。
private EntityManager em;
@Transactional
@Before
public void setUp()
{
em = JPA.em("org.hibernate.ejb.HibernatePersistence");
JPA.bindForCurrentThread(em);
}
@After
public void tearDown()
{
JPA.bindForCurrentThread(null);
em.close();
}
これにより、次のエラーが発生します。
[error] Test tests.TestApp.findById failed: There is no started application
[error] at scala.sys.package$.error(package.scala:27)
[error] at play.api.Play$$anonfun$current$1.apply(Play.scala:44)
[error] at play.api.Play$$anonfun$current$1.apply(Play.scala:44)
[error] at scala.Option.getOrElse(Option.scala:108)
[error] at play.api.Play$.current(Play.scala:44)
[error] at play.api.Play.current(Play.scala)
[error] at play.Play.application(Play.java:12)
[error] at play.db.jpa.JPA.em(JPA.java:21)
[error] at tests.TestApp.setUp(TestApp.java:26)
[error] ...
誰かが助けを提供できるなら、私はそれを大いに感謝します!