Tmarとは
公式サイト
BDD(振る舞い駆動開発)ツール。Cucumberとか、JBehaveとか、色々あるうちの一つ。
groovyにテストフレームワークとして、めちゃめちゃ優秀なSpockっていうのがある。表形式でテストデータを記述できるので、非常にケースが読みやすい。
Spockについては下記
Spock 公式
qiitaで探しても色々ある。
TmarはJspressoというツールベンダーが開発しているみたい。
BDDを進める上で参考になる気がするので、シェア
Tamrの特徴
- Cucumberと同じく、テストコードと別ファイル(*.text.tmar)に仕様を記述する。
- 表形式で仕様を記述でき、テストコードではそれをテストに利用できる。
- 表形式だけでなく、自然言語でも記述可能。
- テストコードはgroovyで書く。
- Eclipse Pluginがとても便利
- テスト結果がHTMLレポートとして出力される。Living Document
例
sample.test.tmar
要件01_会員の年齢によって入場料が変化すること
/each
[会員年齢 |入場料?
| 5 | 300
表のカラムとして文章でデータを記述
/inline
会員年齢が[12]歳以上ならば [500]
/inline
会員年齢が[11]歳以下ならば [300]
テストコード
Spec01.groovy
package com.sample
class Spec001 extends Tmar4Spock {
def test() {
when:
Member sut = new Member();
sut.age = tmar.会員年齢
tmar.入場料 = sut.fea
then:
//tmarによるアサーション
tmar.asserts()
where:
tmar << getData('test')
}
}
DB内のテーブルデータのアサーション
DBの状態の検証もできる。
Spec02.test.tmar
要件02_登録したテーブルの確認
データベースに登録したデータの定義
/table country
[code | name |
| FR |France |
| BR |Brazil |
sqlで結果を取得し、アサーション
/each
[アサーション条件 | 結果? |
| 結果が含まれる |? in @country |
| 結果と一致する | ? match @country |
テストコード
Spec01.groovy
package com.sample
import groovy.sql.Sql;
import org.jspresso.contrib.tmar.core.Tmar4Spock
import spock.lang.Shared;
import com.sample.tmar.Member;
class Spec002 extends Tmar4Spock {
@Shared sql = Sql.newInstance("jdbc:postgresql://localhost:5432/postgres", "postgres", "postgres")
def test() {
when:
def rows=sql.rows("SELECT code,name FROM country")
tmar.結果 = rows
then:
tmar.asserts()
where:
tmar << getData('test')
}
}
Tmarファイルに記述するテーブルはexcelでかいたものを貼り付けることができる。