0

我知道App Engine数据存储查询只是最终一致。但是,对于我的一些测试,我想用已经一致的数据对数据存储进行种子处理(即,在测试发生前保存了很长时间,现在全球一致)。如何为Google App Engine单元测试设置已经一致的数据?

如何在运行测试之前确保初始数据一致?我希望仍然能够要求被测试的行为不需要立即一致。

我正在使用适用于Java的Google Cloud Endpoints,但在这里我没有特定于端点的任何内容。

+0

你说的“最好的意思?”我迄今为止所做的关于“最终一致的Google App Engine数据”的轶事搜索表明,“最终”被定义为相对较短的时间段(大多数情况下不到一秒钟)。 –

+0

改编我的问题。单元测试文档建议将未应用的工作百分比设置为100,这意味着全局(非祖先)查询将始终无法看到更改,因此我不确定是否在此等待工作。 –

回答

0

我结束了创建以下BaseTest类,并具有所有我的测试从继承:

package com.example; 

import com.google.appengine.api.datastore.Key; 
import com.google.appengine.api.datastore.dev.HighRepJobPolicy; 
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; 
import com.google.appengine.tools.development.testing.LocalServiceTestHelper; 

import org.junit.After; 
import org.junit.Before; 
import org.junit.Rule; 

public class BaseTest { 
    public static final class Policy implements HighRepJobPolicy { 
    static boolean shouldApply = false; 

    public static void applyAll() { 
     shouldApply = true; 
    } 

    public static void applyNone() { 
     shouldApply = false; 
    } 

    @Override 
    public boolean shouldApplyNewJob(Key entityGroup) { 
     return shouldApply; 
    } 

    @Override 
    public boolean shouldRollForwardExistingJob(Key entityGroup) { 
     return shouldApply; 
    } 
    } 

    public final LocalServiceTestHelper helper = 
     new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig() 
      .setAlternateHighRepJobPolicyClass(Policy.class)); 

    @Before 
    public void setUp() { 
    helper.setUp(); 
    } 

    @After 
    public void tearDown() { 
    helper.tearDown(); 
    } 
} 

然后测试可以是这样的形式:

@Test 
public void thingShouldDoX() throws Exception { 
    Policy.applyAll(); 
    // Do setup here, everything inside will be consistent. 
    Policy.applyNone(); 
    // Run code under test here, without consistency. 
} 
相关问题