【问题标题】:Powermockito: how to 'release' a class annotated with @PrepareForTest?Powermockito:如何“发布”带有@PrepareForTest 注释的类?
【发布时间】:2015-03-07 15:56:03
【问题描述】:

我有一堂课,例如ExampleClass 由静态函数组成。为了在另一个类中进行测试,它由 powermock 使用 @PrepareForTest 注释模拟,然后由 mockStatic 模拟。

ExampleClass 本身的测试类也将 PowerMockTestCase 扩展为静态模拟 3rd 方库。

现在的问题是,我们的代码覆盖工具不再运行这些测试。我怀疑 ExampleClass 以某种方式被 @PrepareForTest 注释“隐藏”了。因此,在运行测试类之后,我想做一些类似“释放”带注释的类或将其从 powermockito 类加载器中删除的操作。 如何做到这一点?

以某种方式“释放”类

【问题讨论】:

  • EclEmma 是您的代码覆盖工具吗?如果是这样,这是一个可能永远无法解决的已知问题。
  • 我们使用 JaCoco - 所以它至少来自 EclEmma 团队。您是否参考了解决此问题的链接/错误条目?提前致谢!
  • 这可能会提供一些信息:github.com/jacoco/eclemma/issues/15

标签: testng mockito powermock


【解决方案1】:

我认为您担心的是所有单元测试都可能在同一个类加载器中运行,因此 PowerMock 操作的 ExampleClass 类也可能影响其他单元测试。在这种情况下,您可以尝试:

  • 使用 PowerMock 的 Java agent,它使用 Java 检测 API 而不是类加载器进行引导或
  • 实现一个在单独的类加载器中执行每个测试的 JUnitRunner。检查此thread

我认为 JUnit 使用单独的类加载器进行测试,但我找不到任何权威来源。

【讨论】:

  • 非常感谢。虽然我们使用 TestNG 而不是 jUnit,但第一种方法也处理它。 :)
猜你喜欢
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多