AppEngineのデータストアクエリは結果整合性があるだけです。ただし、一部のテストでは、すでに一貫性のあるデータをデータストアにシードしたいと思います(つまり、テストが発生する前に長い間保存され、現在はグローバルに一貫性があります)。
テストを実行する前に、初期データに一貫性があることを確認するにはどうすればよいですか?テスト中のアクションが即時の一貫性を必要としないことを引き続き要求できるようにしたいと思います。
私はJava用のGoogleCloud Endpointsを使用していますが、ここではエンドポイントに固有のものではありません。
最終的に、次の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.
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加