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. 
} 
相關問題