【问题标题】:Mock a static field in a Spring JUnit test在 Spring JUnit 测试中模拟静态字段
【发布时间】:2022-01-28 21:43:26
【问题描述】:

我目前正在开发一个 Spring Boot 项目。我正在为一个类编写一个 JUnit 5 测试,如下所示,

class TheClassUnderTest {

 public String methodToTest() {
   Map<Integer, Object> collection = SomeOtherClass.someStaticField;
  /*
     Some processing logic
  */
  
 }

}

我想知道是否有办法模拟“SomeOtherClass.someStaticField”的使用,以便我可以测试我的类“TheClassUnderTest”。我也使用 Mockito,所以也欢迎任何使用 Mockito 的答案

【问题讨论】:

  • 将 methodToTest() 声明为静态方法,因为静态变量只能从静态上下文中访问
  • 在测试中,应该能够将SomeOtherClass.someStaticField 设置为正在测试的场景所需的任何值。
  • 如何在测试期间设置SomeOtherClass.someStaticField 的值是问题所在。 @AndrewS
  • 这将是安排测试的一部分 - 搜索 测试安排行为断言 以获取示例。
  • 你能在这里举个例子吗

标签: java spring spring-boot junit junit5


【解决方案1】:

自 Mockito 3.4.0 以来,Mockito 添加了对静态方法移动的支持,在此之前您可以使用 powerMockito 来实现这一点。

话虽如此,你在问什么。 mockito 不支持模拟静态 字段,实际上 Mockito 根本不支持模拟类字段,只支持方法。

我建议将静态变量包装在某种方法中,最好使其成为非静态变量。 通常避免使用静态方法,因为一个依赖于另一个类的静态方法的类与其强耦合,对于 TDD 来说是不好的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多