gpt4 book ai didi

java - 我们应该避免使用 Powermock 吗?

转载 作者:行者123 更新时间:2023-12-02 01:07:11 26 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

2年前关闭。




Improve this question




通常,Powermock 允许我们模拟/ stub 静态行为或状态。例如,我们可以模拟实用程序类的静态方法,如 public static String buildKeyFrom(...) {...}并覆盖其行为。甚至在目标类尝试使用类 new MyService(...) 的构造函数创建对象时返回我们的模拟实例

很少示例 powermock API 用法:
when(StorageKeyUtils.buildKey(id, group, suffixes)).thenReturn("my:group-test:an-id:suffix1")whenNew(MyParser.class).withArguments(factory).thenReturn(parserMock)
而且......它有效,实际上它有助于避免重构以提高我们代码的可测试性。您不再需要将静态行为提取到单独的类中,不需要引入工厂来实例化新对象等等。

但是,Powermock 也有 缺点 :

  • 复杂的设置。
    其实不只是单一的whenMockito之类的东西,除了这个和更换test-runner之外,你还强制使用@PrepareForTestPowerMock.mockStatic(..) .试着记住注释中和mockStatic 中要描述的类。 ,而不检查您之前实现的测试或文档。
    有时它甚至可以在没有 mockStatic 的情况下工作当您仍在尝试模拟静态方法时。
    当然,我们可以花一些时间调查文档以澄清所有问题...
  • 错误和故障。
    有时有效,有时无效。例子:
  • 与覆盖工具冲突。由于与类检测发生冲突,您可能会面临测试代码覆盖率丢失的情况,例如 - JaCoCo
  • 尝试谷歌搜索powermock mbeanserver ... 为什么 powermockito 试图滥用 mbeanserver并迫使我们用 @PowerMockIgnore 标记我们的测试集?自 2013 年以来。机器人有时在不排除的情况下也可以正常工作,为什么? - 身份证
  • 无法模拟通过引用作为 lambda 传递的静态方法或构造函数,例如:``
  • 它只是鼓励使用静态 - 欢迎 OOP 大使描述为什么我们不能使用静态方法等

  • 一般 ,我会说是的,我们应该避免使用 Powermock。我看到的一个可疑案例-您没有时间进行适当的代码设计以使其在没有 power-mockito 的情况下具有足够的可测试性(但是如果您没有时间进行代码设计,您真的需要这种质量的测试吗? ?)

    你怎么看?您是否定期使用 Powermock?您在项目中使用 Powermock 时是否遵循一些规则?

    最佳答案

    通常,干净的代码不需要 powermock 进行测试。因为干净的代码支持依赖注入(inject),松耦合并且易于单元测试,所以不依赖于静态方法。

    另一方面,遗留/脏代码充满了静态方法,紧密耦合并且不支持依赖注入(inject)。正是这些遗留代码库,您需要 powermock 进行测试

    关于java - 我们应该避免使用 Powermock 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59866181/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com