如何在Junit Testing中使用ObjectifyService [英] How to use ObjectifyService in Junit Testing

查看:81
本文介绍了如何在Junit Testing中使用ObjectifyService的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果要使用数据存储服务执行junit测试,这就是您要做的

If you want to use datastore service to perform a junit test, this is what you do

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尝试了上述测试

i have tried the above test using 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();

}
}

但是我得到了这种例外情况

but i get this kind of exception

java.util.ServiceConfigurationError: com.google.appengine.tools.development.
LocalRpcService: Provider com.google.appengine.api.datastore.dev.
LocalCloudDatastoreV1Service could not be instantiated

您如何使用 ObectifyService 代替 DatastoreService 实施这种测试?

How do you implement this kind of test using ObectifyService instead of DatastoreService ?

推荐答案

您可能忘了添加必需的依赖项.

You probably forgot to add required dependencies.

这是对您的问题的有效测试:

This is a working test for your question:

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;
        }
    }
}

别忘了添加必需的依赖项.

Don't forget to add required dependencies.

即build.gradle的依赖项:

i.e dependencies at 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'
}

这篇关于如何在Junit Testing中使用ObjectifyService的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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