如何解决“您尚未开始Objectify上下文”在JUnit中? [英] How to resolve "You have not started an Objectify context" in JUnit?

查看:117
本文介绍了如何解决“您尚未开始Objectify上下文”在JUnit中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些在JUnit中运行的Objectify测试代码,并且出现这个错误:

  java.lang。 IllegalStateException:您尚未启动Objectify上下文。您可能错过了ObjectifyFilter。如果您没有在http请求的上下文中运行,请参阅ObjectifyService.run()方法。 
at com.googlecode.objectify.ObjectifyService.ofy(ObjectifyService.java:44)
at com.googlecode.objectify.impl.ref.LiveRef。< init>(LiveRef.java:31)
at com.googlecode.objectify.Ref.create(Ref.java:26)
at com.googlecode.objectify.Ref.create(Ref.java:32)
at com.netbase。 followerdownloader.repository.DownloadTaskRepositoryImpl.create(DownloadTaskRepositoryImpl.java:35)
at com.netbase.followerdownloader.repository.DownloadTaskRepositoryImplTest.setUp(DownloadTaskRepositoryImplTest.java:45)

如何解决这个问题的测试代码?

解决方案

Jeff Schnitzer在这里回答了这个问题: https://groups.google.com/forum /#!话题/客观化-的AppEngine / 8HinahG7irg 。该链接指向 https://groups.google.com/forum/# !topic / objectify-appengine / O4FHC_i7EGk Jeff在其中建议了以下快速和肮脏的解决方法:


  • My @BeforeMethod开始一个客观化上下文(ObjectifyService.begin())


  • My @AfterMethod关闭客观化上下文

  • ul>

    Jeff建议我们使用 ObjectifyService.run()代替它,但承认它有更多的工作。



    下面是我的实现的样子:

      public class DownloadTaskRepositoryImplTest {
    //最大一致性(请参阅https://cloud.google.com/appengine/docs/java/tools/localunittesting)
    private final LocalServiceTestHelper helper = $ b $ new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
    .setDefaultHighRepJobPolicyUnappliedJobPercentage(1 00));

    私密可关闭;

    @Before
    public void setUp(){
    helper.setUp();
    ObjectifyRegistrar.registerDataModel();
    closeable = ObjectifyService.begin();
    }

    @
    之后public void tearDown(){
    closeable.close();

    helper.tearDown();
    }


    I've got some Objectify test code running in JUnit and I'm getting this error:

    java.lang.IllegalStateException: You have not started an Objectify context. You are probably missing the ObjectifyFilter. If you are not running in the context of an http request, see the ObjectifyService.run() method.
        at com.googlecode.objectify.ObjectifyService.ofy(ObjectifyService.java:44)
        at com.googlecode.objectify.impl.ref.LiveRef.<init>(LiveRef.java:31)
        at com.googlecode.objectify.Ref.create(Ref.java:26)
        at com.googlecode.objectify.Ref.create(Ref.java:32)
        at com.netbase.followerdownloader.repository.DownloadTaskRepositoryImpl.create(DownloadTaskRepositoryImpl.java:35)
        at com.netbase.followerdownloader.repository.DownloadTaskRepositoryImplTest.setUp(DownloadTaskRepositoryImplTest.java:45)
    

    How do I resolve this for test code?

    解决方案

    Jeff Schnitzer answered this here: https://groups.google.com/forum/#!topic/objectify-appengine/8HinahG7irg. That link points to https://groups.google.com/forum/#!topic/objectify-appengine/O4FHC_i7EGk where Jeff suggests the following quick and dirty workaround:

    • My @BeforeMethod starts an objectify context (ObjectifyService.begin())

    • My @AfterMethod closes the objectify context

    Jeff suggests we use ObjectifyService.run() instead but admits it's more work.

    Here's how my implementation looks:

    public class DownloadTaskRepositoryImplTest {
        // maximum eventual consistency (see https://cloud.google.com/appengine/docs/java/tools/localunittesting)
        private final LocalServiceTestHelper helper =
            new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
                .setDefaultHighRepJobPolicyUnappliedJobPercentage(100));
    
        private Closeable closeable;
    
        @Before
        public void setUp() {
            helper.setUp();
            ObjectifyRegistrar.registerDataModel();
            closeable = ObjectifyService.begin();
        }
    
        @After
        public void tearDown() {
            closeable.close();
    
            helper.tearDown();
        }
    

    这篇关于如何解决“您尚未开始Objectify上下文”在JUnit中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆