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

可以使用注释将原语变量注入模拟类吗?

淳于乐池
2023-03-14

例如,我有handler:

@Component
public class MyHandler {

  @AutoWired
  private MyDependency myDependency;

  @Value("${some.count}")
  private int someCount;

  public int someMethod(){
    if (someCount > 2) {
    ...
  }
}

为了测试它,我编写了以下测试:

@RunWith(MockitoJUnitRunner.class}
class MyHandlerTest {

  @InjectMocks
  MyHandler myHandler;

  @Mock
  MyDependency myDependency;

  @Test
  public void testSomeMethod(){
    ReflectionTestUtils.setField(myHandler, "someCount", 4);
    myHandler.someMethod();
  }
}

我可以使用reflectiontestutils模拟变量someCount。我可以用Mockito注释来模拟它吗?

共有1个答案

程沛
2023-03-14

没有一种内置的方法可以做到这一点,而且要注意@InjectMocks也有它的缺点:Mockito的@InjectMocks更多的是一种礼貌,而不是一个完全安全的特性,如果测试中的系统添加了任何字段,它就会无声无息地失败。

相反,可以考虑为测试创建一个构造函数或工厂方法:尽管测试代码应该存在于测试中,而不是生产类中,但测试是类的消费者,您可以为它们显式地设计一个构造函数。

@Component
public class MyHandler {

  @AutoWired
  private MyDependency myDependency;

  @Value("${some.count}")
  private int someCount;

  /** Visible for testing. */
  MyHandler(MyDependency myDependency, int someCount) {
    this.myDependency = myDependency;
    this.someCount = someCount;
  }

  // ....
}
 类似资料:
  • 可以模拟抽象类,也可以使用Mockito注释将模拟类注入抽象类。我现在有以下情况: 我想在AbstractClassUnderTest上使用类似@InjectMocks的东西,但它不能与@Mock结合使用。Powermock的Whitebox的当前情况是有效的,但我很好奇是否可以通过注释来解决它。我找不到任何解决方案或示例。 (我知道对测试抽象类的反对意见,我个人更愿意测试一个具体的实现,只使用@

  • 问题内容: 我是JAX-RS的新手,我试图了解注释的工作方式。 在javadoc中有六个等级的列表()。但是,我在网络上找到将this注释与其他类型一起使用的代码,例如: 是否有可以与此注释一起使用的受支持类型的列表?在执行标准之间,此列表是否会更改? 我目前正在试验Jersey,我担心自己写的代码无法移植到其他JAX-RS实现中。 问题答案: 铆接的JAX-RS 规范定义了你可以通过注入的所有标

  • 我是 JAX-RS 的新手,我正在尝试了解注释应该如何工作。 在javadoc中有一个包含六个类的列表(< code >应用程序、< code>UriInfo、< code >请求、< code>HttpHeaders、< code >安全上下文、< code >提供者)。但是,我在网上找到了将this批注用于其他类型的代码,例如: 是否有可用于此批注的支持类型列表?该列表在标准实施期间是否发生变

  • 问题内容: 我想知道是否可以在运行时设置注释变量? 问题答案: 不,那不可能。 注释以常量值的形式存储在类文件中,并且无法在运行时进行计算。 您能做的最好的事情就是存储有关如何计算值的某种“指令”。 例如,您可以使用某种脚本语言存储一个简单的表达式,然后在读取注释值时执行该表达式,或者可以指定要获取真实值的调用方法的名称。

  • 我收到一个错误,说“空白字段'PERRepo'未初始化” 当我用@RequiredArgsConstructor注释@Service类时,我不明白为什么lombok没有注入我的最后一个变量“personRepo”。 @RequiredArgsConstructor说它注入了用@NonNull注释的最终字段和变量,所以我不明白为什么。 感谢所有回答和提示!

  • 问题内容: 我想将Mockito模拟对象注入到Spring(3+)bean中,以进行JUnit的单元测试。我的bean依赖项当前是通过在私有成员字段上使用注释来注入的。 我考虑过使用,但是我希望注入的bean实例实际上是一个代理,因此没有声明目标类的私有成员字段。我不希望为依赖项创建一个公共的setter,因为我将纯粹出于测试目的而修改接口。 我遵循了Spring社区提供的一些建议,但是未创建该模