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

如何利用spring依赖注入模拟包util类静态方法

李谦
2023-03-14

我有一个包使用spring依赖注入进行单元测试,使用下面的代码。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "<xml_location>" })
@WebAppConfiguration

我需要在util类中添加一个静态方法,并需要对其进行模拟,以防止现有的单元测试失败。我尝试使用PowerMock,但得到了不同的错误,如下面的错误。

<class_name> not prepared for test.
org.powermock.api.mockito.ClassNotPreparedException
Failed to load ApplicationContext

共有1个答案

郝修为
2023-03-14

你可以用Mockito来做这个。在最新版本中,它具有mockito.mockstatic()方法。这里有一个例子

@Test
public void staticTest() {
    MockedStatic<GoogleDriveHelper> staticMock = Mockito.mockStatic(GoogleDriveHelper.class);
    staticMock.when(() -> GoogleDriveHelper.fixFileNameExtension(anyString(), anyString())).thenReturn("Blablabla");
    assertEquals("Blablabla", GoogleDriveHelper.fixFileNameExtension("abc", "bcd"));
}
 类似资料:
  • 我有一组仅包含静态方法和单个私有构造函数的API类,因此它们无法实例化。但是,我希望第三方开发人员能够修改API的行为以满足他们的需求。 这是我目前为止的解决方案(通过静态setter方法进行依赖注入)。这是开发人员将使用的公共API类。如您所见,它依赖于< code>StaticApiImpl。 这是我自己编码的默认API实现。 这是第三方可能编写的默认实现的假设扩展版本: 开发者只需在插件初始

  • 问题内容: 我想知道用google guice注入实用程序方法是否是一种好的样式。 假设我们有一个Converter Utility类: 我的想法是使用guice将这个Utility像Singleton这样注入 建议使用guice构建的应用程序采用哪种方式? 问题答案: 这取决于您的方法的性质。 如果有的话 简单 确定性的(即不依赖于其他参数) 没有副作用 不太可能改变 等等 您可以将其保留为静态

  • 谢谢你。 更新:我找到了另一个解决方案,并在另一个帖子中发布了答案:https://stackoverflow.com/a/52021965/2580829

  • 错误:org.mockito.exceptions.misusing.missingMethodInvocationException:when()需要一个参数,该参数必须是“mock上的方法调用”。例如:when(mock.getArticles()).thenreturn(articles); 此外,此错误可能会出现,因为:1。您可以存根:finall/private/equals()/has

  • 我试图模拟一个单例类(SessionDataManager),通过调用静态getInstance()方法获得一个实例,但所有尝试似乎都返回null。 我试过了

  • 我是Guice注入的新手。如何将类注入到将在静态方法中使用的静态变量中? 这是我想在 doLocalize() 方法中使用注入的变量 b 的类。 这是我想要对其执行guice注入的模块类。 注意:我不能改变我的模块和B类,因为它来自另一个依赖项。 我想在我的A类中注入的类