Junit参数化测试与Powermock一起使用 - 如何实现?

51

我一直在尝试弄清楚如何在Junit4中运行带参数的测试,同时还要使用PowerMock。问题是,要使用PowerMock,您需要用其修饰您的测试类

@RunWith(PowerMockRunner.class)

要使用参数化测试,你需要用装饰器来修饰。

@RunWith(Parameterized.class)

从我所看到的,它们似乎是相互排斥的!?这是真的吗?有没有什么办法解决这个问题?我尝试在使用PowerMock运行的类中创建一个参数化类,就像这样:

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

但不幸的是,这并没有什么好处... ParamTestClass 仍然无法运行 PowerMock(也许并不令人惊讶)... 我已经没有更多的想法了,如果有任何帮助,将不胜感激!

更新: 对于未来的搜索者,还可以参考:在没有 RunWith 的情况下使用 PowerMock?

4个回答

44

我也遇到了同样的问题。不幸的是,由于我使用的 JVM,它不允许我使用 PowerMock 规则。所以我用 RunnerDelegate 代替了规则。

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

遇到了相同的JVM问题,这个解决方案非常有效。干杯! - Sean Connolly
这对我没有起作用,因为测试要求添加@PrepareForTest(StaticClass.class),通过在这些注释下面添加它就可以工作了。 - Jonathan JOhx
这个解决方案很好,也可以与pl.pragmatistsJUnitParams一起使用,只需将其用作委托:@PowerMockRunnerDelegate(JUnitParamsRunner.class) - jbaranski

16

是的,这可以通过使用 PowerMock 的 Rule 实现,在使用 JUnit 4.7+ 时可用。


0

以下解决方案适用于我!

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

-1

你不能同时使用两个类运行器,所以你肯定需要编写自己的测试运行器来实现。

我对Powermock一无所知,但经过10秒的研究,似乎一个解决方案是编写一个测试运行器,该运行器使用powermock的类加载器并运行参数化测试。如果你能够找出如何在自定义测试运行器内委派到参数化测试运行器,那可能是你最好的选择。


谢谢您的建议。我会查看PowerMock的类加载器。 - Anders Hansson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接