Posted at

Swiftでのユニットテストで日本語を使う

More than 3 years have passed since last update.

もっと日本語でSwiftプログラミングを - Qiitaを拝読して、先日ユニットテストで日本語を使うと良いというツイートを見かけたことを思い出しました。

実際に日本語を使ったテストを書いてみます。

まずテストしたい関数を用意します。以下のようなカリー化のための関数です。二つの引数を取る関数をカリー化します。

func curry<A, B, C>(_ f: @escaping (A, B) -> C) -> (A) -> (B) -> C {

return { (a: A) -> (B) -> C in
{ (b: B) -> C in
f(a, b)
}
}

}

以下のようなテストを書いてみました。クラス名が「カリー化関数のテスト」で、テスト項目が「test_加算演算子をカリー化できる」です。

class カリー化関数curryのテスト: XCTestCase {

func test_加算演算子をカリー化できる() {
XCTAssertEqual(3, curry(+)(1)(2))
}

}

実際に書いてみると、テストの記述がわかりやすくなったと感じました。テストが複雑になるにしたがってさらに効果がます可能性があります。

次に少し複雑な条件を書いてみました。(ちょっと詳細すぎる気はしますが実験としてご容赦を。)

func test_加算演算子をカリー化してIntを部分的用した関数がInt->Intタイプになる()

とても分かりやすいですね。私の英語力では、カリー化した加算演算子はcurriedAddOperatorかなと思いましたが、Intを部分的用して以下が書けない。英語で書けたとしても読む時に一瞬では理解できない可能性があります。良さそう。

ただしこの記述では「->」があるためConsecutive declarations on a line must be separated by ';'というエラーでコンパイルできません。あたりまえですね。ですので以下のように書き換えてみました。

func test_加算演算子をカリー化してIntを部分的用した関数がIntIntタイプの関数になる()

つまり「->」を「→」で代替しました。しかしこれでもExpected declarationというエラーでコンパイルできません。「⇒」「⇨」「☞」でも駄目。しかたないので

func test_加算演算子をカリー化してIntを部分的用した関数がInt_Intタイプの関数になる()

にしました。

利用できない文字はあるものの、日本語でテストを記述するのは日本人にはとても良いかもしれません。実装では日本語を利用しづらいことが多いですが、テストではもっと日本語を使っても良さそうだと思いました。