当前位置: 首页 > 知识库问答 >
问题:

如何在Spring中用mockito模拟autowired@value字段?

王长卿
2023-03-14

我使用的是Spring3.1.4.Release和Mockito1.9.5。在我的春季课上,我有:

@Value("#{myProps['default.url']}")
private String defaultUrl;

@Value("#{myProps['default.password']}")
private String defaultrPassword;

// ...
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-context.xml" })
public class MyTest 
{ 

我想为我的“Defaulturl”字段模拟一个值。请注意,我不想模拟其他字段的值--我希望保持这些字段的原样,只保留“Defaulturl”字段。还要注意,我的类中没有显式的“setter”方法(例如setDefaultURL),我不想仅仅为了测试的目的创建任何方法。

既然如此,我如何模拟一个字段的值呢?

共有1个答案

南门鸿哲
2023-03-14

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

米哈斯多赫马尔的评论提供了一个例子:

在测试期间调用bean方法之前,请使用ReflectionTestutils.SetField(bean,“fieldName”,“value”);

更新

自从Spring4.2.rc1引入以来,现在可以在不提供类实例的情况下设置静态字段。请参阅文档的这一部分和此提交。

 类似资料:
  • 问题内容: 我正在使用Spring 3.1.4.RELEASE和Mockito 1.9.5。在我的Spring班上,我有: 从我目前设置的JUnit测试中可以看到: 我想为“ defaultUrl”字段模拟一个值。请注意,我不想模拟其他字段的值-我想保留它们的值,只保留“ defaultUrl”字段。另外请注意,我的班级中没有明确的“ setter”方法(例如),并且我不想仅为测试目的而创建任何方

  • 我有一个Spring组件我想测试,这个组件有一个autowired属性,为了单元测试的目的,我需要更改它。问题是,这个类在后构造方法中使用autowired组件,所以我不能在它实际使用之前替换它(即通过反射)。 我该怎么做? 在调用postconstruct方法之前,有什么方法可以用其他东西替换资源吗?喜欢告诉Spring JUnit runner autowire不同的实例吗?

  • 我正在为我的服务层编写单元测试。我的服务层有多个自动生成的字段。我想只模拟其中一个和其他初始化为自动驾驶。 服务接口 服务实现 测试类 我只想嘲笑productRepository字段,但不想嘲笑productManager 问题是productManager 是否可以自动初始化它们?就像它们在运行带有完全加载的上下文的Spring引导应用程序时被初始化一样。

  • 我已经讨论过这个问题:如何使用Mockito在Spring中模拟自动构建的@Value字段?。我们如何模拟以下内容? 这样我们就可以在进行模拟时获取其价值?

  • 我想测试使用自动连线网络客户端的服务类检索不同响应JSON时的程序行为。为此,我希望在测试中能够用从文件读取的JSON替换从api url检索的响应体JSON。 具体来说,我想测试DTO中使用

  • 是模拟抽象类:,而是接口。这是失败点: 如何模拟这段代码?