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

在Spring JUnit测试中模拟一个静态字段

章兴发
2023-03-14

我目前正在做一个春装项目。我正在为一个类编写一个JUnit 5测试,如下所示,

class TheClassUnderTest {

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

}

我想知道是否有一种方法可以模拟“SomeOtherClass.someStaticField”的用法,这样我就可以测试我的类“TheClassUnderTest”了。我也用Mockito,所以任何用Mockito的回答也欢迎

共有1个答案

艾志尚
2023-03-14

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

话虽如此,你要问的是。mockito不支持模拟静态字段,实际上mockito根本不支持模拟类字段,只支持方法。

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

 类似资料:
  • 我有一堂这样的课: 我需要使用EasyMock模拟服务<代码>EasyMock。createMock()后跟replay()不起作用。P、 S:这是其他开发人员编写的遗留代码,我们不能在这里更改代码。

  • 我需要使用mockito测试handleIn()方法。 但是,代码需要调用这个遗留代码util.getContextPDO,它是一个静态方法。 注意,在测试环境中,这个util.getContextPDO总是返回异常,我打算通过始终返回一个虚拟IPDO来绕过这个util.getContextPDO()。 最初,我认为这可以通过使用类“MyClass”的spy()来实现,这样我就可以模拟getIPD

  • 我的测试用例是: 当我调用时,实际上不会调用此方法。如何在side中模拟方法的结果?

  • 在安装到AEM 5.6.1实例之前,我正在使用maven构建和测试我的代码。我已经编写了单元测试,这些测试使用wcm的实现从aem模拟中获益。io和其他需要使用powermockito模拟静态方法的单元测试。 以下是我对aem上下文、sling Mock和powermock的maven依赖关系。 在我的课堂上,我正在为aem上下文设置规则,并准备一些用于模拟的静态类: 当我通过命令行运行mvn测试

  • 我有一个这样的方法。 > 如果我模拟记录器,是否必须将方法更改为post(字符串json,记录器记录器)?否则,如何使此模拟与该方法交互?