💡

LocalDatastoreHelperを使ってCloud Datastoreを使ったテストをする方法

2021/01/11に公開

https://github.com/googleapis/google-cloud-java/blob/master/TESTING.md#testing-code-that-uses-datastore

にいろいろ書いてあるけどLocalDatastoreHelperを使うとコードだけでもっと簡単に書ける。

LocalDatastoreHelperについて

com.google.cloud:google-cloud-datastoreに入ってるCloud Datastoreのエミュレータを起動してくれるヘルパークラスだがあまりドキュメントに書かれていない。

ソースコード: https://github.com/googleapis/java-datastore/blob/master/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java

Cloud Datastore Emulatorに必要なコンポーネントを入れておく

gcloud components install beta cloud-datastore-emulator`

cloud-datastore-emulatorを起動する際にgcloud betaコマンドが必要になるので合わせて入れる。
(入れておかないとLocalDatastoreHelperによって裏で起動されるプロセスが自動インストールしようとしてプロンプトで固まってしまう: https://github.com/googleapis/java-datastore/issues/302

Cloud Datastore Emulatorへ接続するサンプルコード

import com.google.cloud.datastore.testing.LocalDatastoreHelper;

// エミュレータ起動用クラスの初期化
LocalDatastoreHelper emulator = LocalDatastoreHelper.create();

// エミュレータを開始(裏で`gcloud beta emulators datastore start`が実行される)
emulator.start();

// エミュレータに接続する`DatastoreService`のインスタンスが作れるのでテストコードでgetしたりputしたりする
DatastoreService datastore = emulator.getOptions().getService();

// 使い終わったら裏で起動したエミュレータプロセスを止める
emulator.stop();

Discussion