首页 >Java >java教程 >如何使用 Mockito 和 PowerMock 在 Java 中模拟返回对象的特定静态方法?

如何使用 Mockito 和 PowerMock 在 Java 中模拟返回对象的特定静态方法?

Susan Sarandon
Susan Sarandon原创
2024-11-28 04:24:12470浏览

How to Mock Specific Static Methods Returning Objects in Java Using Mockito and PowerMock?

模拟特定静态方法以返回对象

Mockito 和 PowerMock 为模拟静态方法提供强大的支持。然而,模拟单个静态方法并让它返回一个对象可能会很棘手。

避免不匹配和调用问题

当模拟返回一个对象的静态方法时对象,避免返回类型不匹配很重要。使用默认策略模拟所有静态方法(例如为对象值方法返回 null)可能会导致错误。

PowerMockito.mockStatic(Static.class, new Answer()) 将模拟所有方法,包括 m2,它具有不同的返回类型。同样,PowerMockito.when(Static.m1(param1, param2)).thenReturn(1000l) 也不会被调用,因为静态方法没有被正确模拟。

启用静态模拟和目标特定方法

解决方案是将静态方法模拟和目标方法存根的概念结合起来。 PowerMockito.mockStatic 为类启用静态模拟,而 when-thenReturn 语法允许您存根特定方法。

PowerMockito.mockStatic(Static.class);
when(Static.m1(param1, param2) ).thenReturn(1000l);

此方法启用所有方法的静态模拟Static.class 的但不会覆盖默认的存根策略。通过使用when-thenReturn,您显式地存根m1方法以返回1000l。

考虑MockStatic重载

PowerMockito为mockStatic提供了两个重载。单参数重载 (mockStatic(Static.class)) 可以在没有默认策略的情况下启用静态模拟。双参数重载 (mockStatic(Static.class, Answer())) 允许您为模拟方法提供默认策略。

根据您的具体测试场景,您可以选择使用这些超载。如果您只想模拟特定方法或为不同的方法调用设置多个返回值,则单参数重载更合适。

以上是如何使用 Mockito 和 PowerMock 在 Java 中模拟返回对象的特定静态方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn