我正在使用 Spring 3.1.4.RELEASE 和 Mockito 1.9.5。在我的春季课程中,我有:
@Value("#{myProps['default.url']}") private String defaultUrl; @Value("#{myProps['default.password']}") private String defaultrPassword; // ...
从我目前这样设置的 JUnit 测试中:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:test-context.xml" }) public class MyTest {
我想模拟我的“defaultUrl”字段的值。请注意,我不想模拟其他字段的值——我想保持原样,只有“defaultUrl”字段。另请注意,我的班级中没有明确的“setter”方法(例如setDefaultUrl),我不想仅仅为了测试目的而创建任何方法。
setDefaultUrl
鉴于此,我如何模拟该字段的值?
您可以使用 Spring 的魔力ReflectionTestUtils.setField来避免对代码进行任何修改。
ReflectionTestUtils.setField
评论提供了一个例子:
ReflectionTestUtils.setField(bean, "fieldName", "value");在测试期间调用您的bean方法之前使用。
ReflectionTestUtils.setField(bean, "fieldName", "value");
bean
查看本教程以获取更多信息,尽管您可能不需要它,因为该方法非常易于使用
更新
由于 Spring 4.2.RC1 的引入,现在可以设置静态字段而无需提供类的实例。请参阅文档的这一部分和此提交。