unit test on jhipster2018-03-23 JHipsterでのunit testでいくつかハマったのでメモ。 unit test実行はgradle test 単一test classを指定するにはgradle test --tests FQDN.class.name test class内のlog.debug(...)を出力するには、build.gradleにtest.testLogging.showStandardStreams = trueを記述し、またsrc/test/resources/application.ymlに以下を記述(src/main/resources/application-dev.ymlには記述あり) logging: level: ROOT: DEBUG bz.mydns.walt.canmatch: DEBUG io.github.jhipster: DEBUG test classにおいてRESTで認証したuserを表したい時には@WithMockUser(import org.springframework.security.test.context.support.WithMockUser;) testされる側のREST methodでは、java.security.Principalを勝手に引数に加えることでlogin userを取得出来、それをtestする場合にはtest classのMockMvcでrestUserInfoMockMvc.perform(post("/api/user-infos")...)などとする時にorg.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.userを使って.user("foo")とすると、認証された”foo”というuserでのaccessをmock出来るが、org.springframework.security.core.context.SecurityContextHolder.getContext().getAuthentication()というstatic methodでjava.security.Principalが取れ、それに.getName()で名前を取得可能。その方がspringっぽいのかな。test class側では、認証accessが必要なmethodに上記の@WithMockUserをつければ良い。@WithMockUser(username="foo", password="pw", roles={"USER"})などとすれば色々指定可能だが基本的には不要 参照 WithMockUser Spring Security 使い方メモ テスト(2017-08-02) 11. Testing Method Security(Spring公式doc) Spring Securityを使っているWebアプリのUnitテスト(2016/11/12)