YAMLに手を出す
Excelでちまちまドキュメント作るのがかったるいから,なんか適当な構造化テキストで記述して,あとでガーっとExcelに貼付けてみては?と思いYAMLに手を出す。
Groovy(Java)で使えるYAMLパーザはJYamlかJvYAMLのどっちか。JYamlはGroovyのYAML解説ページに取り上げられるくらいだから,こっちが有名どころかと思いきや,パーザの出来が悪い。
くわしくはこちら。→openbooth: JavaのYAMLライブラリって
今回の用途はドキュメント指向なんで,YAMLのブロックスタイル使えないと困るんで,JvYAMLがあって良かった。
ただ,このJvYAML,JYamlとくらべるとドキュメントが全然足りない(Javadocすらない)。まあ,使うAPIは1つくらいだし,テストコードもあったからソース見りゃいいんだけどさ。:-(
あーそうそう,具体的になに企んでいるかって言うと「テスト仕様書」ね。様式はExcelってことになってるんだけど,編集のしやすさとか重視されてないんで,こんな事考えてみてるワケよ。
試しに作ってみたYAML文書はこんなやつ。
- title: なんとかのテストをする node: - title: ほげほげ node: - title: なんとかがなんとかでなんとかする cond: これこれ,こうゆう条件だ。 expect: こうなってくれ。 - title: あれがこれでこうなる cond: こうゆう条件だ。 expect: こうなるに違いない - title: Foo Bar Boo node: - title: なんとかがなんとかでなんとかする cond: これこれ,こうゆう条件だ。 expect: こうなってくれ。 - title: これもテストしないと
それを処理するGroovyスクリプトの試作版はこれ。
import org.jvyaml.YAML // どうゆうワケか,File.newReader()だとYAMLがパースに失敗する YAML.load(new File("data.yaml").text).eachWithIndex { it, index -> println "$index : $it.title" it.node.eachWithIndex { n1, idx1 -> println "$index-$idx1 : $n1.title" n1.node.eachWithIndex { n2, idx2 -> println "$index-$idx1-$idx2 : $n2.title" println "$n2.cond" println "$n2.expect" println "----" } } }
処理結果はこう。
0 : なんとかのテストをする 0-0 : ほげほげ 0-0-0 : なんとかがなんとかでなんとかする これこれ,こうゆう条件だ。 こうなってくれ。 ---- 0-0-1 : あれがこれでこうなる こうゆう条件だ。 こうなるに違いない ---- 0-1 : Foo Bar Boo 0-1-0 : なんとかがなんとかでなんとかする これこれ,こうゆう条件だ。 こうなってくれ。 ---- 1 : これもテストしないと
こんだけできれば上等。ブロック構文使えば,こんな記述もできるしね。
- title: | なんとかがなんとかでなんとかする cond: | これこれ,こうゆう条件だ。 ・条件1 ・条件2 expect: | こうなってくれ。 ・期待値a ・期待値b