技術検証したり、資格等をここに残していきます。テストAssertEqualsとAssertThatの挙動の違いがよくわかってないところがあったので検証しました。個人的にはAssertEqualsで全部行えばいいと思ってました。assertThatでしかできないことというのは、Equalsよりも弱い検証になりがちなので、必要だとは思えなかったからです。AssertEqualsに不満がある点もあるので、自分の中で折り合いをつけるために今回の検証を行っています。結論自体は出ていません。今後のテストでAssertThatもちゃんと使って行こうかな、って認識を改めた程度です。今回の検証ソースAssertX.java自分への検証ソースのため、今後大きく変更する可能性もあります。今回の記事に出てくるライブラリ今回の検証していたライブラリを挙げておきます。{message})一致条件のみ検証できるメソッド。expectedという順番であれば、最高だったが、そうではないのでイケてない。第三パラメータのmessageは無くても問題ないが、あるとエラー時に何を検証したかったのかが表示できるようになる。このパラメータが活きてくるのは、AssertAllと併用した時である。assertは失敗すると、失敗した行以降の検証が行われないが、assertAllを使用した時、全てテストしてくれるようになる。AssertAllにも問題があり、何かのテストが失敗したことは分かるものの、具体的に何が失敗したのかが分からないようになってしまう。そこで、assertEqualsの第三パラメータを使用することで、何を検証しようとして失敗したのかをトレースすることができる。個人的には、具体的な値を入れることよりも、トレースのための材料とすることがメインの目的のため、適当に1,2,3等でも問題ないと思っている。assertThat(actual){.as(message)}.検証したいメソッド(expected).検証したいメソッド2(expected)...色んなことが検証できるメソッド。hasFieldOrPropertyWithValue等々のメソッド名を見れば何を検証したいのかがわかる。個人的に嫌いな点として、actualとexpectedの間にmessageを定義しなければならないので、ノイズになってしまう。メソッド見れば検証したいことがわかるので、そもそもmessageはノイズ。この感覚はたくさんテスト書けば自分の中でのケリがつくかと思っている。あとは、メソッド見ればわかる、というレベルに落とし込むのであれば、詳細なメソッドを知っておく必要があるので、昔の自分にとってはすこしハードルが高かった。assertAllとassertThatは併用しない方がいい。そもそも、ライブラリが違うので、自分が期待していない挙動を行った。(具体的には下に記載)assertAllと同じ挙動を期待するのであれば、SoftAssertionsを使用したほうがいい。softAssertionsのassertAllで一度に検証することができる。併用しないほうがいいといったが、上のように1行に1つしか検証しない場合は特に問題が起きない。問題は以下のように、一つの項目に対して複数の検証を行おうとしたときである。sexの検証という1行1行の検証だったが、実際の挙動は全部を3回検証するという結果になってしまった。無駄に試行回数を増やしているだけになるので、使わないほうがいいと思う。以下のメッセージが3回出現する。<"乱太郎">類似記事nainaistar.hatenablog.comカテゴリー「テスト」で他にもテストで使える技術を書いてるので、そちらもよろしくお願いします。nainaistar.hatenablog.com「もっといいテストが書きたい(AssertEqualsとAssertThatの検証)」をお読みいただきありがとうございます。役に立った、と思われましたら、ブックマーク・シェア・フォローをしていただければ嬉しいです。21:17Tweet関連記事2023-03-06SpringのValueに初期値を与える(エラーを起こさずにnullも初期値にする)小ネタ。@Valueで初期値を与えたい時の記法をメモします。API)にて、Collectors.groupingByとい...2022-04-25Javaでnull様等のnullという文字列を埋める(String#formatted)以前にMessage.formatを使用して、null様のnullという文字列を...2022-03-24JavaのLombokのWithアノテーションを素振りした個人用ネタ。12:00問い合わせはこちらから。//List形式の画面で記事を入れる場所。上から2個目と7個目のsectionの後に入れる。//記事内で個別に指定されないときに使うAd挿入場所。//0から始まる値で、2を指定すると3番目のと直前に差し込む。insertAdsense();引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。