「それより俺のテストを見てくれ。こいつをどう思う?」「すごく・・・日本語です・・・・」

「それより俺のテストを見てくれ。こいつをどう思う?」

「すごく・・・日本語です・・・・」


オラっち、日本語でテストメソッド名を定義するんダーーイ

PHPって、メソッド名を日本語で定義できます(文字コードUTF-8なら)。PHPでTDDワークショップで初めて知りました。
ということでテストクラスのメソッドを日本語で定義してたんですが、普通はメソッド名が日本語になってたら驚きますよね。

ということで、日本語でメソッドを定義することについて、ちょっとまとめてみます。

日本語で関数定義とかマジ勘弁☆

日本語メソッド名に対する拒否反応はおおよそ以下のような感じ。

とにかくありえない
  • ありえん
  • なにこれキモい
  • (無言で)rm -rf test/unit/*

気持ちはわかります。具体的には次のどちらか、もしくは両方になるんじゃないでしょうか。

ひらがなと漢字がありえない
  • 日本語ネイティブでない人が関わる可能性がある(可能性を無視できない)

確かにこの場合日本語はナシでしょう。(こういうケースが多いと思いますが)
ドキュメントとしてのテストコードの存在意義が潰されてしまいますからね。

自然文がありえない
  • たとえ英語でであっても "testHogeShouldBeConvertedToFugaWheneverFlagIsTrue()" みたいなのはメソッド名として受け入れられない。

あいやしばらく!
こういうケースでは "testHogeParser()"みたいなテストメソッドの中に大量のassersionが詰め込まれて、そのテストメソッドが何をテストしたいのかわかりづらくなっている場合があり、日本語にするかどうかは別としても一考の余地ありだと思っています。

でもちょっと待って、そのテストメソッドはなんのため?

テストメソッドって(別のコードから)呼び出さないよね

このメソッドを呼び出すために日本語をカタカタ打ち込んだりする必要はないです。
後から読むだけであり、あとから読むことが重要です。
通常のメソッドと違ってコードの文脈の中で目にすることはなく、見るのは定義本体のみで、通常のメソッド名に求められるような「簡潔さ」は求められません。

詳細に保証(説明)したいことがある

テストメソッドは1つの事柄をテストすべきで、メソッド名はテストで保証(説明)したい事柄を明確にするものであるべきです。
これは1つのテストメソッドにassertionを1つだけとするのが良いとされる理由の一つです。
「そのメソッドが何をテストしているのか」が重要になります。

仕様書を見るのに近い感覚で後から見ることが多い

テスト対象の仕様やインターフェースを保証するドキュメント的な役割を求めてテストケースを見ることがあります。
アウトラインからテストメソッド一覧を俯瞰する等の場合、一目で内容が頭に入ると嬉しいです。

じゃぁ日本語で書いたらよくね?

上に挙げたような理由で、テストが日本語(英語にしても自然文に近い形)で書いてあると得すると考えています。

表現しやすい&伝わりやすい

ドキュメントやWikiを日本語で書く感覚でテストメソッドを日本語で書いています。
対象処理の仕様や気を付けたい罠動作を他者に伝えたいとき、テストが意図することを表現しやすいです。

一覧時の一目で分かる感

テストメソッド一覧を出したり、テストの失敗レポートが出た時などにその効果を感じます。

*ただし

「環境が許せば」です。日本語ネイティブ以外の人が触れる可能性を無視できないなら日本語にするのは難しいでしょうし、「生理的に受け付けない」というのも無視できない理由になり得ます。
ものにもよります。「Githubで公開」的なものは全部英語でやったほうが得が多いでしょう。

まとめ

つまり日本語がどうどいうよりは

  • テストの粒度を小さく保とう
  • テストが何をテストしているのか明確にしよう

追記 2012/04/26

メソッド名に日本語を使うとエディタによってはシンタックスハイライトが正しく動作しないケースがあることが判明。(なにをいまさら)
英語派に寝返る。