如果您想使用数据存储区服务来执行junit测试,这就是您的工作
LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalMemcacheServiceTestConfig(),new LocalDatastoreServiceTestConfig());
@Before
public void setUp() {
helper.setUp();
}
@After
public void tearDown() {
helper.tearDown();
}
@Test
public void testInsert1() {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
assertEquals(0, ds.prepare(new Query("yam")).countEntities(withLimit(10)));
ds.put(new Entity("yam"));
ds.put(new Entity("yam"));
assertEquals(2, ds.prepare(new Query("yam")).countEntities(withLimit(10)));
}
我使用objectify尝试了上述测试
Public class myofyTest{
@Entity
private class Food{
@id Long id;
String foodtype;
public Food(String food){
foodtype = food ;
}
}
static{
ObjectifyService.register(Food.class);
}
LocalServiceTestHelper helper = new LocalServiceTestHelper
(new LocalMemcacheServiceTestConfig(),new LocalDatastoreServiceTestConfig());
@Before
public void setUp() {
helper.setUp();
}
@After
public void tearDown() {
helper.tearDown();
}
@Test
public void testInsert1() {
Food food = new Food("yam");
ofy().save().entities(food).now();
}
}
但我得到了这种例外
java.util.ServiceConfigurationError: com.google.appengine.tools.development.
LocalRpcService: Provider com.google.appengine.api.datastore.dev.
LocalCloudDatastoreV1Service could not be instantiated
如何使用 ObectifyService 代替 DatastoreService 来实施此类测试?
答案 0 :(得分:1)
您可能忘记添加所需的依赖项。
这是针对您的问题的工作测试:
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;
import com.googlecode.objectify.ObjectifyFactory;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Index;
import com.googlecode.objectify.cache.AsyncCacheFilter;
import com.googlecode.objectify.util.Closeable;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static com.piyasatakip.backend.OfyService.ofy;
import static junit.framework.Assert.assertNotNull;
/**
* Created by devrimtuncer on 27/03/16.
*/
public class ObjectifyServiceTest {
private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());
protected Closeable session;
@BeforeClass
public static void setUpBeforeClass() {
// Reset the Factory so that all translators work properly.
ObjectifyService.setFactory(new ObjectifyFactory());
ObjectifyService.register(Food.class);
}
@Before
public void setUp() {
this.session = ObjectifyService.begin();
this.helper.setUp();
}
@After
public void tearDown() {
AsyncCacheFilter.complete();
this.session.close();
this.helper.tearDown();
}
@Test
public void doTest() {
Food food = new Food("yam");
// 1) save food to data store
ofy().save().entity(food).now();
// 2) retrieve food from data store
Food foodRetrieved = ofy().load().type(Food.class).filter("foodtype", "yam").first().now();
assertNotNull(foodRetrieved);
}
@Entity
private class Food {
@Id
Long id;
@Index
String foodtype;
public Food(String food) {
foodtype = food;
}
}
}
不要忘记添加所需的依赖项。
即build.gradle中的依赖项:
dependencies {
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.34'
compile 'com.google.appengine:appengine-endpoints:1.9.34'
compile 'com.google.appengine:appengine-endpoints-deps:1.9.34'
compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.34'
compile 'com.googlecode.objectify:objectify:5.1.12'
compile 'javax.servlet:servlet-api:2.5'
compile 'org.jsoup:jsoup:1.7.2'
testCompile 'com.google.appengine:appengine-testing:1.9.34'
testCompile 'com.google.appengine:appengine-api-stubs:1.9.34'
testCompile 'junit:junit:4.4'
}
答案 1 :(得分:0)
我注意到您的设置中没有以下行()
Closable session;
session = ObjectifyService.begin()
你在tearDown()中的helper.tearDown()之前也需要这个:
session.close();