如何解决“您尚未开始Objectify上下文”在JUnit中? [英] How to resolve "You have not started an Objectify context" in 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关闭客观化上下文 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屋!