【问题标题】:Junit Parameterized tests together with Powermock - how?Junit 参数化测试与 Powermock 一起 - 如何?
【发布时间】:2011-01-28 02:37:00
【问题描述】:

我一直试图弄清楚如何在 Junit4 中与 PowerMock 一起运行参数化测试。问题是要使用 PowerMock,你需要用

装饰你的测试类
@RunWith(PowerMockRunner.class)

并且要使用参数化测试,您必须使用

进行装饰
@RunWith(Parameterized.class)

据我所见,它们似乎相互排斥!?这是真的?有没有办法解决?我试图在使用 PowerMock 运行的类中创建一个参数化类;像这样:

@RunWith(PowerMockRunner.class)
class MyTestClass {
     @RunWith(Parameterized.class)
     class ParamTestClass {
          // Yadayada
     }
}

但不幸的是,这并没有多大好处...ParamTestClass 仍然无法在 PowerMock 支持下运行(也许并不奇怪)...而且我的想法已经用完了,所以任何帮助都是非常感谢!

更新: 对于未来的谷歌用户,另请参阅:Using PowerMock without the RunWith?

【问题讨论】:

    标签: java junit powermock parameterized


    【解决方案1】:

    我遇到了同样的问题。不幸的是,由于我拥有的 JVM,它不会让我使用 PowerMock 规则。而不是我使用 RunnerDelegate 的规则。

    @RunWith(PowerMockRunner.class)
    @PowerMockRunnerDelegate(Parameterized.class)
    

    【讨论】:

    • 有同样的 JVM 问题,这个解决方案就像一个魅力。干杯!
    • 这对我不起作用,因为测试要求通过在这些注释下方添加 @PrepareForTest(StaticClass.class) 来添加然后这有效。
    • 此解决方案效果很好,也适用于pl.pragmatists JUnitParams,只需将其用作代理:@PowerMockRunnerDelegate(JUnitParamsRunner.class)
    【解决方案2】:

    是的,如果您使用 JUnit 4.7+,则可以使用 PowerMock Rule

    【讨论】:

      【解决方案3】:

      您不能同时使用两个类运行器,因此您必须编写自己的测试运行器才能实现。

      我对 Powermock 一无所知,但经过 10 秒的研究,看起来一种解决方案是编写一个使用 powermock 的类加载器并运行参数化测试的测试运行程序。如果您能弄清楚如何从自定义测试运行程序中委托给参数化测试运行程序,那可能是您最好的选择。

      【讨论】:

      • 感谢您的建议。我来看看 powermock 的类加载器。
      【解决方案4】:

      以下解决方案对我有用!

      @RunWith(PowerMockRunner.class)
      @PowerMockRunnerDelegate(Parameterized.class)
      

      【讨论】:

        猜你喜欢
        • 2019-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-06
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        相关资源
        最近更新 更多