JUnit(SpringJUnit)のTips

JUnit(SpringJUnit)のTipsを随時更新していきます。

SpringJUnit4ClassRunner 対 SpringRunner

@RunWithの指定はSpringJUnit4ClassRunnerとSpringRunnerがありますが、機能的には全く一緒のため、名前が短いSpringRunnerがベターです。

Spring 4.3 テスト関連の主な変更点 - Qiita

Spring 4.3から、SpringJUnit4ClassRunnerの別名クラスとしてSpringRunnerクラスが追加されます。名前が短くてナイスです :thumbsup: 利用できる機能はSpringJUnit4ClassRunnerと全く一緒で、SpringJUnit4ClassRunnerも引き続き利用可能です。

ControllerテストのNestedServletException

ControllerのテストでControllerが例外をthrowした場合、NestedServletExceptionに例外がラップされて再throwされます。

10.2.2. レイヤごとのテスト実装 — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.4.1.RELEASE documentation

SystemExceptionResolverを有効にしていないため、例外ハンドリングされずにNestedServletExceptionがサーブレットコンテナに通知される。 NestedServletExceptionのgetCauseメソッドにより取得された例外から、Controllerで期待した例外がthrowされていることを検証する。

@Valueのついたprivate変数の設定

テスト対象クラスの@Valueのついたprivate変数に値を設定する方法は以下の2つがあります。

  1. ReflectionTestUtils.setField()を使う
  2. @SpringBootTestでテストプロパティを読み込ませる

テックノート – JUnit実行時に@Valueの変数へ値をセットする方法