gpt4 book ai didi

jsf - 使用 PowerMock 分析 JUnit 测试?

转载 作者:行者123 更新时间:2023-12-04 06:00:06 24 4
gpt4 key购买 nike

我们有几个非常慢的 JUnit 测试,它们大量使用了模拟,包括静态函数的模拟。单项测试需要 20-30 秒,整个“mvn 测试”需要 25 分钟。

我想分析时间浪费在哪里,但在分析方面的经验很少。

我认为依赖模拟对象的初始化花费的时间太长了。

两个问题:

1)如何快速获取数字,哪些方法浪费了时间?我不需要复杂的高级用户工具,只需要一些基本的东西来获取数字。 (证明我们所做的那种 mock 是邪恶的)

2) 你知道什么设计缺陷会导致如此糟糕的时序吗?我们测试应该调用模拟服务的 JSF 支持 bean。也许在支持 bean 中可能有一些输入验证或未重构的业务逻辑,但无法更改(请不要对此发表评论 ;-) )

广告 2)例如,一个测试有大约 30 个(!)类要准备用于@PrepareForTest 的测试。这不可能是好事,但我无法解释原因。

最佳答案

这是我对此的意见:

  • 尝试使用一些简单的东西,比如 Apache Commons StopWatch class .我发现这是一种在代码中发现瓶颈的简单方法,通常当你找到第一个瓶颈是什么时,其余的就更容易发现。我几乎从不浪费时间尝试配置过于复杂的分析工具。
  • 我认为在完全模拟的单元测试中出现这样的性能缺陷很奇怪。如果我猜测我会说您缺少一两个模拟组件,并且实际上在您不知情的情况下调用了数据库或外部 Web 服务。当然我可能是错的,因为我不使用 PowerMock 并且我强调永远不要模拟 任何 静态方法。这是您目前最大的设计缺陷,也是为您的代码提供良好测试覆盖率的最大障碍。那么该怎么办?您有 2 个选择,您可以将静态方法重构为更容易模拟的类方法。另一种选择是将静态方法包装在类对象包装器中,然后模拟包装器。如果静态方法来自我没有源的第三方库,我通常会这样做。
  • one test has about 30 (!) classes to be prepared for test with @PrepareForTest. This cannot be good, but I cannot explain why.这听起来真的很像您可能也有做得太多的方法!在大约 99% 的情况下,对于单个方法来说,这只是太多的依赖项。很可能这种方法可以分离成单独的更容易测试的方法。

  • 希望这可以帮助。

    关于jsf - 使用 PowerMock 分析 JUnit 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016053/

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