エキサイト株式会社の中です。
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
簡単に埋め込むことができました。