开发者社区 问答 正文

Powermock和Mockito的兼容性和变更

我正在尝试使用电源模拟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中这有何变化?

展开
收起
垚tutu 2019-11-28 19:03:45 1021 分享 版权
阿里云 AI 助理回答

在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具体改动的详细信息,但基于通常的升级实践和官方文档建议,您可以尝试以下步骤来适应这一变化:

  1. 确认依赖更新:首先,确保您的项目依赖已经正确升级到PowerMock 2.x的相应版本,并且与其兼容的Mockito版本也已更新。PowerMock 2.x通常需要与特定版本的Mockito一起工作,不兼容的版本组合可能会导致方法缺失或行为异常。

  2. 使用Mockito注解:PowerMock 2.x更加强调与Mockito的紧密集成,推荐使用Mockito的注解来进行模拟配置。如果可能,尝试将部分配置迁移到Mockito的@Mock@Spy等注解,并结合@InjectMocks来自动注入模拟对象。

  3. 构造函数模拟的新方式:对于构造函数模拟,检查PowerMock 2.x是否有新的API或者推荐的做法。可能需要通过@PowerMockRunnerDelegate配合其他Runner(如MockitoJUnitRunner),并使用@SuppressStaticInitializationFor来避免静态初始化问题,同时利用Mockito的@MockdoAnswer()willReturn()等方法来控制构造函数的行为。

  4. 查阅官方文档和迁移指南:直接访问PowerMock的官方GitHub页面或其发布的迁移指南,那里会有详细的更改说明和示例代码,指导如何从旧版本平滑过渡到2.x版本。

由于知识库中没有直接提及PowerMock的具体变动细节,上述建议基于通用的升级策略和Mockito-PowerMock的常见用法。为了获得最准确的指导,请直接参考PowerMock的官方资源进行操作。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: