きり丸の技術日記

技術・エンジニアのイベント・資格等はこちらにまとめる予定です

テスト

PlayWrightで動かしているシナリオを動画で記録する

公式ヘルプに設定方法は載っているので、この記事で知れることは「PlayWrightで動画を撮影できる」というのがこの記事の最大の目玉です。 環境 PlayWright 1.12.1 対応 new_contextのパラメータにビデオ用のディレクトリを設定するだけです。new_contextして…

Wiremockをモックサーバとして使用してJavaの単体テストをする

弊社ではモックサーバにWiremockを使用しています。 この記事ではWiremockを知ってもらうきっかけを提供することを目的としています。詳しいことは他の方の記事を参考にした方が良いでしょう。 ゴール WiremockのモックサーバでJUnitでテストする Wiremockの…

【Pytest】不安定なテストに失敗したら自動リトライさせる(flaky)

以前、Javaで不安定なテスト(flakyなテスト)をリトライさせるライブラリを素振りしました。今回の記事はPython版です。 Pytestの公式ページにてFlakyなテストに対する解決策となるライブラリを複数提示されており、その中でもGitHubのStar数が一番多かった…

JestでParameterizedTestを行う(異なるテストデータで同じ内容のテストを行う)

小ネタ。 Jestを使って、異なるテストデータで同じ内容のテストを行うParameterizedTestをやろうとしたときのメモ。なお、JestではParameterizedTestという名称では表現されていません。 なお、使い方自体は参考情報に乗せている公式を見てください。 環境 J…

Javaで事前条件を満たしていないテストを安全に終了させる(AssumeTrue)

たとえばDBは本番環境ではOracle、テスト環境ではH2を使っているケースがあるとします。その場合、Oracleでは動くがH2では動かないSQLを作成してしまうことが考えられます。 他にも、本番環境はAmazon RDS for Oracleを使っているが、テスト環境で用意できて…

PythonのPytestでParameterizedTestをする

PythonのPytestでもParameterizedTestをしたかったので、それを調べた時のメモ。ParameterizedTestのメリット等は特に解説しません。 環境 Python 3.8.6 Pytest 5.4.3 ゴール 2021年の各月の末日を求める。求める際にはParameterizedTestを使用する。 使い方…

Javaで標準入力と標準出力を使ったコードをテストする

標準入力と標準出力をテストしようとすることは基本的にはありません。標準出力ではなく、Loggerに書き込まれていることを確認することが多いでしょう。 しかし、知っておいて損はありません。今回の記事では、FizzBuzzを使って標準入力と標準出力のテストを…

Pythonで記述されたPlaywrightの実行環境をDockerで用意する

最近、私の中でMicrosoft製のE2EツールのPlaywright(Star数25.6K)がアツイです。 今回、PlaywrightをCI環境で使いたかったため、実行環境をDockerで準備する手順を残します。また、CIでE2Eのシナリオを実行できるようにします。 環境 Python 3.8.6 Playwrigh…

Javaで最近使っているParameterizedTest【2021年版】

※ JUnit5のアップデートを知るための記事ではありません。私の知識アップデートをお伝えする記事になっています。 以前、ParameterizedTestに関する記事を書きました。その時は、テストコードの表現力を意識して、ArgumentsSourceを使ったほうが良いという結…

【2021】SpringBootでpropertiesやymlの設定ファイルが読み込めることのテストを書く

去年書いた記事で使用していたクラスがDeprecatedになっていたので、新しく更新します。 前回の記事を書いた時にアップデートしておけばよかったです。 変更点 ConfigFileApplicationContextInitializer から ConfigDataApplicationContextInitializer に変…

JavaでRESTが簡単にテストできるRest-Assuredを素振りしてみた

JavaでRESTが簡単にテストができるとされるRest-Assuredというライブラリを知ったので素振りしました。ですので、あまり深い話はこの記事ではしません。 なお、印象としてはSpringのMockMvcを使っているのであれば、わざわざ追加でRest-Assuredを導入はしな…

エンティティを渡すだけでDBのユニットテストのセットアップしたい(SimpleJdbcInsertとBeanPropertySqlParameterSource)

皆さんはDBのユニットテストを行うとき、どのようにテストのセットアップを行っていますか。 私はSimpleJdbcInsertを使用しています。テーブル名とInsert対象のカラムと値のマップを渡すだけで更新してくれるので、個人的には使いやすいと思っています。 し…

SpringSecurityが導入されているControllerをWebMvcTestでテストする【SpringBoot】

以前にControllerをテストする記事を書きました。しかし、SpringBootTestの使い方しか分からなかったので、WebMvcTestのやり方を理解していませんでした。 ですが、ToshiakiMaki@makingさんのサポートにより、なんとかWebMvcTestでのテストができるようにな…

SpringSecurityを使ったRestControllerのテストを行う

きり丸アドベントカレンダー2020の16記事目です。 自システムのデータをREST APIで公開すると、非同期で処理ができるようになるのでフロントのシステムをSPAにできたりします。第三者にデータを提供することもできます。 ぜひ、REST APIでシステムを公開する…

データベースのH2を使用してMyBatisの取得・更新のテストを行う(JavaとSpringBoot)

きり丸アドベントカレンダー2020の9記事目です。 今回の記事でMyBatisのテストを行えるようにします。テスト用のスターターが準備されているので、テストのための準備は簡単です。ただし、テストのセットアップは慣れていないと、時間がかかってしまいます。…

【Java】不安定なテスト(Flakyなテスト)に失敗したら自動リトライさせるライブラリを使用する(test-retry-gradle-plugin)

過去に所属していたプロジェクトでは、CIが終わるまでに2.5時間ほどかかっていました。その中で極稀に対向システムのモックがうまく立ち上がっていなかったり、DBのセットアップが終わらないままテストを行ったりして、テストに失敗することがありました。 …

RPAツールのKatalon Recorderでシナリオをインポート・エクスポートする

「Katalon Recorder インポート」で検索しても、「インポートはできない」という記事しか見つかりませんでした。見つかっても、単語が似ている「Katalon Studio」の方法ばかり。しかし、バージョンが上がったのか、Katalon Recorderで色々と試したところ、イ…

【Java】よく使うassertThatのメソッド集【AssertJ】

「assertThat」と検索すると私のブログに引っかかる人がいるようなので、この記事を書きました。ただ「AssertJ」と検索すると、たくさん有用な記事も見つかります。 なので、この記事は「AssertJ徹底解説」ではなく、「きり丸がよく使うAssertJのメソッド」…

SpringBootでpropertiesやymlの設定ファイルが読み込めることのテストを書く【Java】

2021/03/31 追記 SpringBoot2.4以降の場合はこちらの記事も参考にしてみてください。 SpringBootではpropertiesファイルやymlファイル(以降、設定ファイル)に、DBのURL等々の環境ごとの変数を記載できます。 設定ファイルの値が目的通り一致していることを…

【JS】JestでJsonを比較する(特定の項目を無視する)

「JavaでJsonを比較する記事」を職場のSlackに貼ったところ、フロントでもjsonをいい感じに比較したいという依頼が来ました。 ちゃんとヒアリングしていないので、相手の環境を妄想する。 妄想環境 ソースコードは自動生成で、テストが一切ない IN/OUTだけで…

【Java】【テスト究極系】動的にテスト対象を増やして、アサーションルーレットを回避する

過去にJavaのテストについていろいろ書きました。 パラメタライズドテスト、assertEqualsとassertThatとの比較等々…。 色々と学んだのですが、ダイナミックにテスト項目を増やす方法が分からず、苦汁をなめながらアサーションルーレットなテストを書いていま…

【Spring】TestExecutionListnerを継承した自作アノテーションでSpringのテストセットアップを快適にする

テスト設計というのは非常に難しいです。 ちょっとでも見誤ると、すぐにテストができない設計になってしまい、テストをしないという設計になってしまいがちです。 これを避けるためにTDDを行うのですが、粒度の違うUTとE2Eではテストの設計が違ってくるので…

【Spring】Spring機能使いつつ、テストを高速化する

※ もっと高速化する方法がありましたら教えていただきたいです。 もしくは、高速化するためのリファレンスページ教えてください。 はじめに Springフレームワークは、DI機能を持っており、依存関係を疎にできます。 テストするときは、@SpringBootTestのアノ…

【Java】JavaでXMLを比較する(特定の項目を無視するやり方)

前に、JavaでJsonを比較しつつ、特定の項目を無視するやり方をする記事を書きました。 同様にJavaでXMLを比較しつつ、特定の項目を無視するやり方を調べたので、記事に残しておきます。 環境 Java 下記のどれか org.assertj.core.api.Assertions.assertThat …

JavaでJsonを比較する(特定の項目を無視するやり方)

自分用記事。 Json比較に手間取ったので、未来の自分に役に立つはず。 なお可能であれば、assertThatのメソッドチェインに加えたいので、もしそっちで比較できることを知っていれば教えてほしいです…。 環境 org.skyscreamer.jsonassert JSONAssertで読み込…

もっともっといいテストが書きたい(AssertAllをもっと使う)

もっともっといいテストが書きたい(AssertAllをもっと使う) 下記の記事を書いて、 「テストで必要なことを全て書いた! あとは、テストに慣れるだけだ!」 と、思ってたのですが、思ったよりもassertAllを使いたい場面が増えてきたので、自分用へのメモを残…

もっといいテストが書きたい(AssertEqualsとAssertThatの検証)

AssertEqualsとAssertThatの挙動の違いがよくわかってないところがあったので検証しました。 検証したくなった理由 個人的にはAssertEqualsで全部行えばいいと思ってました。 assertThatでしかできないことというのは、Equalsよりも弱い検証になりがちなので…

パラメータだけ変えて中身は同じテストをしたい(ParameterizedTest)

Javaでもっといいテストが書きたい! ということで、Junit5のParameterizedTestに注目して調査しました。 正直、どんな機能が眠っているのかよくわかっていないので、もしオススメの機能があれば教えていただきたいです。 なお、結論については、自分の主観…