読者です 読者をやめる 読者になる 読者になる

モデルのプロパティのAttributeに(cipher = true)をつけるとテストが失敗する現象への対応

gen-modelで生成したモデルオブジェクトに、

@Attribute(cipher = true)
private String accessToken;

を付け、appengine-web.xml

<system-properties>
	<property name="slim3.cipherGlobalKey" value="hogehogehogehoge"/>
</system-properties>

を追記すると、ブラウザから動作させた場合は普通に動作し、Datastoreにも暗号化されて保存されるが、EclipseよりRun as->JUnit Testとすると、下記の例外が発生した。

java.lang.IllegalStateException: A cipher key is required.

appengine-web.xmlを読み込んでいない?


とりあえず、該当のテストクラスにて、setUpメソッドを実装。

@Override
@Before
public void setUp() throws Exception {
    super.setUp();

    Datastore.setGlobalCipherKey("hogehogehogehoge");
}


ただしこの方法、大量のテストクラスに対して上記の対応が必要になります。(該当のモデルを利用するController, Serviceのテストクラスなど)
もっとスマートなやり方がありそう。


ちなみに、ktrwjrであれば、上記の対応は必要ないみたいです。
でも、Eclipse上で完結させたいなー。