繁体   English   中英

在测试框架中使用Hibernate的Java Play Framework 2.0

[英]Java Play Framework 2.0 using Hibernate in test framework

我想知道是否有人使用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]     ...

如果有人可以提供任何帮助,我将不胜感激!

试试这个模式:

running(fakeApplication(), new Runnable()
{
  public void run()
  {
    JPA.withTransaction(new play.libs.F.Callback0()
    {
      public void invoke() throws DataAccessException
      {
        ...
      }
    });
  }
});

是另一个示例,它显示了在抽象基类中使用bindForCurrentThread尝试过的设置和拆卸方法中的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM