早速ですが、冬休みに学んだことを昨年末に作ったプロトタイプへ反映してみました。
JUnitは問題なしですが、Arquillianでのテストでは問題が2つほど…orz
Arquillianの環境設定の手順をまだ書いてないままですが、自分向けメモって感じで…。
注入できないと怒られてDeployに失敗する問題
昨日のエントリレベルのテストコードをプロトタイプでも書いて、テスト実行しましたが、とりあえずdeployにこけました。
ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer.
という、よくわからないエラーが。
スタックトレースみると
PlainTextActionReporterFAILUREDescription: deploy AdminCommandError occurred during deployment: Exception while loading the app : WELD-001408 Unsatisfied dependencies for type [IMessageDigest] with qualifiers [@Default] at injection point [[field] @Inject jp.co.hoge.hogehoge.controller.DatabaseAuthController.messageDigest]. Please see server.log for more details.
と、dependenciesに満足していない様子。beans.xmlに書いてるのがみえてない感じ…。
war固めるソースはこんな感じでした。
@Deployment
public static Archive createDeployment(){
return ShrinkWrap.create(WebArchive.class, "OpportunityListBeanTest.war").
addPackage(LogExceptionInterceptor.class.getPackage()).
addAsResource("META-INF/persistence.xml").
addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}
ってか、Arquillianのサイトにあるサンプルレベルで書いてるので、いかんすね…。で、調べた所、やはりbeans.xmlを指定する方法が。
ここ↓
addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
を
こんな感じ↓にすると(mavenで作ってれば)通常使っているbeans.xmlをみてくれてデプロイ成功&テスト実行できました。やったー。
addAsWebInfResource(new File("src/main/webapp", "WEB-INF/beans.xml"));
日本語メソッドのテストが実行できない問題
Arquillianだって日本語メソッドでテストするー、と思って書いたら…動かない。マジですか。
英語メソッドだと問題なく動いているのに…

日本語メソッドにするとアウトって悲しすぎです。どこかで文字化けちゃって内部でメソッド名が見つからない感じのエラーです。うーむ。

別途要調査…。新年早々「英語メソッドでもいいじゃない」と悪魔がささやいている…が、Java EEではArquillianのテストは絶対使えそうなのであきらめたくない…。