PythonのBDDフレームワークlettuceの日本語対応

Rubyの人気のBDDフレームワークであるcucumberをPythonにポーティングしたlettuceというライブラリを先日発見。
しかし振舞いを定義するfeatureファイルが日本語で書けず、これは頂けないということでlettuceのソースを眺めていたら簡単に追加そうだったのでforkした。
んで、pull requestを投げたところ本体にマージされたのでちょっと宣伝。

使い方

基本的な使い方は公式のページを参照してください。
ここでは主に日本語化した場合の使い方について記述します。

featureファイル

日本語でのfeatureファイルの書き方はほぼcucumberと同じです(違いについては後述)

ファイルの先頭で何の言語で書かれているかという宣言をしてください。
無い場合は自動的に推測してくれますが書いておいた方が無難だと思います。
日本語の場合だと言語コードはjaになります。
またファイルのエンコーディング指定を書く場合は1行目にファイルエンコーディングを書いて2行目にfeatureファイルの言語指定を書いてください。
以上の2つの事を踏まえて具体的なコードは以下。

# -*- coding:utf-8 -*-
# language: ja
step定義ファイル

step定義ファイルでfeatureの該当行の関数を書くにはstep()デコレータを使いますが、step()デコレータの引数をユニコード文字列にしないと該当stepが無いというレポートされます。

@step("strだとステップとして検出されない")
def str_is_bad():
   pass

@step(u"ユニコード文字列で書く")
def unicode_is_good():
   pass

現状の問題点

結果表示

日本語でfeatureファイルを書くと、featureファイルやstep定義ファイルの該当行表示の縦位置がそろわないという問題があります。
これはいわゆる全角文字の幅が2と数えられず、1と数えられる事に起因しています。

feature定義

Cucumberは英語のfeatureに相当する部分がフィーチャもしくは機能と両方書けますが、lettuceはフィーチャとしか書けません。
featureファイルの構文解析が対応していないっぽいことがデバッグを読んで分かったのでこちらは直り次第pull requestを投げたいと思います。

Python3.x対応

こちらは問題ではないんですがPython2.x系だとメソッド名やクラス名に日本語が使えないので各ステップのメソッド名をローマ字で書くか英語で書く必要があります。

最後に

マスターには取り込まれたみたいですがPyPIに上がってるパッケージははてダを書いている時点では古いと思われるので作者githubから落としてsetup.py installとする方がいいかもしれません。


他に何かあったらコメントに追記してもらえれば幸いです。