本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接
问题:在单元测试中填充Spring @Value标志的属性
我尝试为一个简单的bean编写一个单元测试,这个bean在我的程序中用于验证表单。该bean使用@Component进行注解,并具有一个类变量是这样初始化的
@Value("${this.property.value}") private String this.property;
我想为这个类中的验证方法编写单元测试,但是,如果可能的话,我想完成测试但是不使用属性文件。我这样做的原因是,如果我从属性文件中获取的值发生了变化,我希望这不会影响我的测试用例。我的测试用例是用来测试验证方法的这段代码的,而不是用来验证的那个值本身。
是否有一种方法可以在我的测试类中使用Java代码来初始化Java类,并在该类中填充Spring @Value标注的属性,然后使用该属性进行测试?
我确实发现这个How to似乎接近目标了,但仍然使用一个属性文件。我想要用的是Java代码。
回答
如果可能的话,我将尝试在没有Spring Context的情况下编写这些测试。如果你在没有spring的情况下在测试中创建了这个类,那么你就可以完全控制它的属性。
要设置@value属性,你可以使用Springs ReflectionTestUtils -它有一个方法setField来设置私有属性。
@see JavaDoc: ReflectionTestUtils.setField(java.lang.Object, java.lang.String, java.lang.Object)
回答二
这似乎是可行的,虽然还是有点啰嗦(我还是想要更短的)
@BeforeClass
public static void beforeClass() {
System.setProperty("some.property", "<value>");
}
// Optionally:
@AfterClass
public static void afterClass() {
System.clearProperty("some.property");
文章翻译自Stack Overflow:stackoverflow.com/questions/1…