ReflectionTestUtilsで変数に値をセットする

エキサイト株式会社の中です。

Spring Bootでpropertyの値を取得する時、@Valueで取得すると思います。 @Valueは外部から値を注入しているので、UTをする時mockを設定しなければなりません。

ReflectionTestUtilsを使って設定する方法を説明します。

@Service
public class TestServiceImpl implements TestService {
    @Value("${spring.test.hoge}")
    private String hoge;

    @Override
    public String test() {
        return hoge;
    }
}

で取得できると思います。

ユースケース

  • @Valueでpropertyの値を取得している

入力例

テストファイルです。

class TestServiceImplTest {
    @InjectMocks
    private TestServiceImpl testService;

    @Test
    void test() {
        ReflectionTestUtils.setField(testService, "hoge", "naka", String.class);

        Assertions.assertEquals("naka", testService.test());
    }
}

出力例

テスト結果のコンソールです。

Task execution finished ':module:service:test --tests "com.service.TestServiceImplTest.test"'.

解説

ReflectionTestUtils.setField(testService, "hoge", "naka", String.class);
  • プロパティファイル名を埋め込みたいmockのtestService
  • プロパティファイル名を埋め込む変数名hoge
  • プロパティファイル名を埋め込む値naka
  • 埋め込む型String.class

簡単に埋め込むことができました。