9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaAdvent Calendar 2024

Day 18

JUnitの日本語Wrapperを作ってみた

Last updated at Posted at 2024-12-17

この記事は Java Advent Calendar 2024 18日目の記事です。

みなさん割と言語仕様について書かれているので毛色が違うものになりますが、ご容赦ください。

今回はだらだら作ったJUnitの日本語Wrapperの紹介です。なお全然メソッド網羅できてません。

コードはGistに上げています。

作った理由など

端的に言うと、日本語話者にはexpectedsactualsがわかりにくいと思ったからです。

チームメンバーから上がってきたプルリクですべて逆になっているものもありましたし、私だけではないと思っています。

JUnitの引数がわかりにくいと思った理由

まず単純に英語が苦手だからですね。expectedsactualsでいつもどちらが期待する値でどちらが実際の値か迷います。

2つ目の理由として、なんとなく検証対象の値を先に書きたいと考えるからです。

語順的に「何が」「どうである」のほうが自然ですし、関数の重要度的にもactualsのほうが第一引数にふさわしいように思えます。

一貫性という意味でも引数を1つしか取らないassertNullなどが存在するため、actualsが第一引数のほうが自然に思えます。

ということでなぜexpectedsが第一引数なのか調べようと思ったんですが、先人がいましたのでリンクのみ貼ります。

結論としては「expectedsのほうがリテラルを入れることが多く、短くなりやすいため可読性が高いから」ということらしいです。

私は書くことに重きを置いていたので、読むときの視点は抜けていました。

このWrapperがどのように解決するか(あるいは簡単な使い方)

assertEqualsをサンプルに使い方を簡単に紹介します。

まずは通常のJUnit5を使う場合のコード例は次のようになりますね?

assertEquals(5, calculator.add(2, 3));

一方、今回のWrapperでは次のように書けます。

実行結果.(calculator.add(2, 3)).は期待値の(5).と同じです();

日本語話者には圧倒的にわかりやすいですね。(まるでなでしこ

次に引数が1つのパターンのサンプルです。

assertNull(hoge.stringOrNull()); // サンプルなのでOptional使えとか言わないでください><

コード書かなくてもわかりそうな気がしますがWrapperで書き換えると次のような感じです。

実行結果.(hoge.stringOrNull()).はnullです();

終わりに

これで毎回expectedsactualsでどっちがどっちだっけって迷わなくて済むようになりました。

今後の展望としては次のようなことを考えています。

  • ジェネリクスあたりが怪しいので修正する
  • 全メソッドを網羅する

JJUG CCC 2024 Fallでも「今日から始めよう🚀日本語🇯🇵プログラミング🧑🏻‍💻」という内容の発表がありました。

今回はJUnitのWrapperを作りましたが、「可読性の高い」コードを書くために、日本語でのプログラミングを進めてみてはいかがでしょうか?

修正

2024/12/18 Gist:引数も日本語を使うように修正

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?