我正在尝试使用电源模拟2.0.2和模拟2.0。以前我使用powermock模拟一些局部变量:我在测试类上使用
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyClass.class})
whenNew(MyClass.class).withAnyArguments().thenReturn(myClassMock);
使用Power模拟1.6一切都很好。当我尝试移动到Powermock 2.x时,在PowerMock中再也找不到whenNew()方法了。在新的Powermock中这有何变化?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在PowerMock的2.x版本中,whenNew()
方法的行为和使用方式确实发生了一些变化。根据您的描述,您之前在1.6版本中使用的代码片段:
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyClass.class})
public class YourTestClass {
// ...
whenNew(MyClass.class).withAnyArguments().thenReturn(myClassMock);
// ...
}
在升级到PowerMock 2.x后,您可能遇到了找不到whenNew()
方法的问题。这是因为PowerMock 2.x对API进行了一定程度的调整和优化,特别是它对Mockito的集成方式有所改变,这可能导致一些传统用法不再适用或需要调整。
为了解决您的问题,在PowerMock 2.x中,要模拟构造函数创建的新实例,您应当确保正确地配置了测试类以支持构造函数模拟,并且使用与新API兼容的方式。虽然直接从给定的知识库资料中无法提取关于PowerMock 2.x具体改动的详细信息,但基于通常的升级实践和官方文档建议,您可以尝试以下步骤来适应这一变化:
确认依赖更新:首先,确保您的项目依赖已经正确升级到PowerMock 2.x的相应版本,并且与其兼容的Mockito版本也已更新。PowerMock 2.x通常需要与特定版本的Mockito一起工作,不兼容的版本组合可能会导致方法缺失或行为异常。
使用Mockito注解:PowerMock 2.x更加强调与Mockito的紧密集成,推荐使用Mockito的注解来进行模拟配置。如果可能,尝试将部分配置迁移到Mockito的@Mock
、@Spy
等注解,并结合@InjectMocks
来自动注入模拟对象。
构造函数模拟的新方式:对于构造函数模拟,检查PowerMock 2.x是否有新的API或者推荐的做法。可能需要通过@PowerMockRunnerDelegate
配合其他Runner(如MockitoJUnitRunner
),并使用@SuppressStaticInitializationFor
来避免静态初始化问题,同时利用Mockito的@Mock
和doAnswer()
或willReturn()
等方法来控制构造函数的行为。
查阅官方文档和迁移指南:直接访问PowerMock的官方GitHub页面或其发布的迁移指南,那里会有详细的更改说明和示例代码,指导如何从旧版本平滑过渡到2.x版本。
由于知识库中没有直接提及PowerMock的具体变动细节,上述建议基于通用的升级策略和Mockito-PowerMock的常见用法。为了获得最准确的指导,请直接参考PowerMock的官方资源进行操作。