1. ホーム

[解決済み】ユニットテスト中のSpring @Valueの入力について

2022-03-28 12:48:55

質問

私は、フォームを検証するために私のプログラムで使用されている単純なビーン用のユニットテストを書こうとしています。このビーンには、次のアノテーションがあります。 @Component を使用して初期化されるクラス変数を持っています。

@Value("${this.property.value}") private String thisProperty;

このクラス内の検証メソッドのユニットテストを書きたいのですが、できればプロパティファイルを利用せずに書きたいのです。その理由は、プロパティファイルから取得する値が変更されても、それがテストケースに影響を与えないようにしたいからです。私のテストケースは、値を検証するコードをテストしているのであって、値そのものをテストしているのではありません。

テストクラス内でJavaコードを使用してJavaクラスを初期化し、そのクラス内のSpring @Valueプロパティに値を入力して、それをテストに使用する方法はありますか?

私はこれを見つけた ハウツー が近いと思われますが、やはりプロパティファイルが使われています。私はむしろ、すべてJavaコードであることを望みます。

解決方法は?

可能であれば、Spring Contextを使わないでテストを書いてみてください。もし、Springを使わないテストでこのクラスを作成すれば、そのフィールドを完全に制御することができます。

を設定するために @value フィールドを使用すると、スプリングス ReflectionTestUtils - メソッドを備えています。 setField を使用して、プライベートフィールドを設定します。

参照 JavaDoc: ReflectionTestUtils.setField(java.lang.Object, java.lang.String, java.lang.Object)