小编典典

如何使用 Mockito 在 Spring 中模拟自动装配的 @Value 字段?

all

我正在使用 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),我不想仅仅为了测试目的而创建任何方法。

鉴于此,我如何模拟该字段的值?


阅读 217

收藏
2022-06-20

共1个答案

小编典典

您可以使用 Spring 的魔力ReflectionTestUtils.setField来避免对代码进行任何修改。

评论提供了一个例子:

ReflectionTestUtils.setField(bean, "fieldName", "value");在测试期间调用您的bean方法之前使用。

查看教程以获取更多信息,尽管您可能不需要它,因为该方法非常易于使用

更新

由于 Spring 4.2.RC1
的引入,现在可以设置静态字段而无需提供类的实例。请参阅文档的这一部分和提交。

2022-06-20