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系だとメソッド名やクラス名に日本語が使えないので各ステップのメソッド名をローマ字で書くか英語で書く必要があります。