ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

assertjで例外発生のテストをシュッと書く

Exception を throw する可能性のある method のテストを書く時今までは

@Test(expected = NantokaException.class)

とアノテーションをつけたり

try {
    nantokaService.doNantoka();
} catch (NantokaException e) {
    assertThat(e.getMessage()).isEqualTo("Nanka");
}

として確認していたけど、前者は exception の中身を確認することはできないし後者は exception が発生しなかった場合にスルーされてしまうって問題があってちゃんと確認したいなら両方書くとかしてた。

んで、java8以後 + 最近のassertjだともっといいやり方あるよーって教えてもらって下記のように書けることを知った。

assertThatThrownBy(() -> nantokaService.doNantoka())
        .isInstanceOfSatisfying(NantokaException.class, e -> {
            assertThat(e.getMessage()).isEqualTo("Nanka");
        });

シュッとしてて良い。

gradle の warning がどこで出てるのかわからない時の調べ方

$ ./gradlew build

とかして

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.5.1/userguide/command_line_interface.html#sec:command_line_warnings

こんなのが返ってきてどれが原因なのか教えてくれなかったけど、

$ ./gradlew build -Dorg.gradle.warning.mode=all

みたいに -Dorg.gradle.warning.mode=all をつけてやれば

> Task :hoge-fuga:generateProto
Using TaskInputs.file() with something that doesn't resolve to a File object has been deprecated and is scheduled to be removed in Gradle 5.0. Use TaskInputs.files() instead.

みたいに教えてくれた。

Spring Framework で空JSONを返したい

{}

やんごとなき事情でこういう空っぽのJSONを返す必要がある場合には空っぽの response 用の class を用意して JsonSerialize annotaion をつけてやるのが楽。

@JsonSerialize
public class NantokaResponse {
}
@RestController
public class NantokaController {
    @GetMapping("/wei")
    public NantokaResponse wei() {
        return new NantokaResponse();
    }
}

Spring Boot 1.5.x から 2.0.0 に上げた時にハマったこと1

Gradle の multi project で動かす時に1.5.x系では abstract project に対して、

bootRepackage.enabled = false

としていたけど、2.0.0では、

bootJar.enabled = false
jar.enabled = true

としないとダメ。

bootRepackage.enabled を bootJar.enabled に置き換えた時点でエラーは出なくなるが jar.enabled も入れてやらないといけない。
それっぽいエラー出してくれたらいいけどうまく読み込めてないせいで直接関係ないとこのエラーが出てハマりやすいので要注意。

Spring Boot 2.0 Migration Guide · spring-projects/spring-boot Wiki · GitHub

TokyuRuby会議09でLTしてきた

TokyuRuby会議に初めて参加してLTしてきました。

LTした結果多くの方が投票してくれてLT王となりました!やったぜ!!

いただいたLT王Tシャツ
f:id:dameninngenn_owata:20150904030203j:plain

副賞(?)のガオガイガーの日本酒!!
f:id:dameninngenn_owata:20150904030650j:plain

LTのタイトルは「第一回 チキチキ 独断と偏見と狭い観測範囲の中から選ぶコミットログ選手権」というやつで、タイトルからネタLTの匂いがプンプンする感じですがその通りの完全なネタLTでした。

f:id:dameninngenn_owata:20150904031231p:plain

LTの冒頭でも言った通りスライドは公開しないです。すいません。今回のLTは結構しゃべりで大部分フォローする感じの発表だったので、資料だけ見てもたぶんおもしろくないですし。。

で、TokyuRuby会議09 - Regional RubyKaigi を見てもらえればわかると思いますが、私以外のLTはとてもためになる内容のものばかりで酔ってない時に聞きたいと思うようなLTばかりでした。
そんな中こんなネタLTで応募しちゃってやっちゃったかなーとすごく不安な気持ちになってたんですが、懐が深く、受け入れてくれてその上おもしろかったよと言ってもらえてとても嬉しかったです。

飛び道具を使って賞をもらった感は否めないので機会があれば今度はもう少しちゃんとした内容のLTをやりたいですね。

スタッフの皆さん、参加者の方々、最高のイベントをありがとうございました!


末路