Usual Software Engineer

よくあるソフトウェアエンジニアのブログ

Spring Bootのテスト小ネタ

最近良いネタがないので苦し紛れで小ネタです。 以前 non web な Spring Boot のサンプルの記事を書きましたが

innossh.hatenablog.com

今の Spring Boot の最新バージョンは 2.0.2 になっています。 使ったことがない人は公式ドキュメントを一通り読めば、豊富な機能もだいたいつかむことができます。

Spring Boot Reference Guide

さてどんな小ネタを紹介するかというと、テストで使える OutputCapture というクラスについてです。 リポジトリは前回と同じですが、 Spring Boot は 2.0.2 にアップデートしてます。

で、何ができるかですが

spring-boot-example-nonweb/NonWebSpringBootApplicationTest.java at e400dc7a199630721f760456ef5ce423002e56b4 · innossh/spring-boot-example-nonweb · GitHub

    @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 を使って出力のチェックを行うテストを書いてからコードを変えていくのが良いかもなと思った次第です。

以上何でもない小ネタでした。