Spring Bootのテスト小ネタ
最近良いネタがないので苦し紛れで小ネタです。 以前 non web な Spring Boot のサンプルの記事を書きましたが
今の Spring Boot の最新バージョンは 2.0.2 になっています。 使ったことがない人は公式ドキュメントを一通り読めば、豊富な機能もだいたいつかむことができます。
さてどんな小ネタを紹介するかというと、テストで使える OutputCapture
というクラスについてです。
リポジトリは前回と同じですが、 Spring Boot は 2.0.2 にアップデートしてます。
で、何ができるかですが
@Test public void testJson() throws Exception { NonWebSpringBootApplication.main(new String[]{"--verbose", "{\"hoge\":\"fuga\"}"}); assertThat(this.out.toString()).contains("It's a JSON object!"); }
こんな感じでブラックボックス的に Spring Boot のアプリケーションを実行して、出力結果に指定の文字列が含まれているかどうかテストすることができます。 Web アプリケーションであれば API にリクエストする E2E テストを書くと思いますが、コマンドラインアプリケーションに対してのテストになるので、あまり見ない形式な気がしたので少し驚きました。
テストコードの無いプログラムで、実装を深く知らずともリファクタリングしていきたい時などに、ひとまず OutputCapture
を使って出力のチェックを行うテストを書いてからコードを変えていくのが良いかもなと思った次第です。
以上何でもない小ネタでした。