【问题标题】:Problems with @PrepareForTest annotation@PrepareForTest 注释的问题
【发布时间】:2017-12-03 05:33:06
【问题描述】:

有没有办法为类中的所有测试使用一个@PrepareForTest 注释? 我看到尽管在 setUp 方法之前编写了例如 @PrepareForTest(PortalUtil.class) ,但我必须用每个使用 PortalUtil.class 的测试方法再次编写它。这可以解决吗?

【问题讨论】:

    标签: java junit mockito powermockito


    【解决方案1】:

    您可以将注释放在测试类的顶部。

    @PrepareForTest(PortalUtil.class)
    public class MyTest {
        ....
    }
    

    来自 javadoc 的注释:

    这个注解可以放在测试类和单独的测试方法中。如果放置在一个类上,该测试类中的所有测试方法都将由 PowerMock 处理(以允许可测试性)。要为单个方法覆盖此行为,只需在特定测试方法上放置 @PrepareForTest 注释。这在例如您想在测试方法 A 中修改类 X 但在测试方法 B 中您希望 X 保持不变的情况下很有用。在这种情况下,您可以在方法 B 上放置 @PrepareForTest 并从 value() 列表中排除类 X。

    https://static.javadoc.io/org.powermock/powermock-core/1.6.5/org/powermock/core/classloader/annotations/PrepareForTest.html

    【讨论】:

    • 问题是 - 这不起作用。其他方法需要单独写
    • 我不明白你说的“分开写”是什么意思。在类的顶部添加这个注释只是消除了在每个测试上放置注释的需要。在每个测试中,您可以更改 PortalUtil 的使用方式。
    • @ŁukaszBocheński 如果它不起作用,并且文档说它应该起作用,那么最好的下一步是粘贴一个小示例,以便我们找出原因。否则,我们不知道什么适合您,只知道根据文档和最佳实践应该做什么。
    • 从这里看来,在类级别使用注释时,您可能会遇到不稳定的测试:stackoverflow.com/questions/32977009/…
    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多