使用PowerMock模拟来自多个类的静态方法


103

我知道如何使用PowerMock从类中模拟静态方法。
但是我想使用JUnit和PowerMock从测试类的多个类中模拟静态方法。

谁能告诉我有可能做到这一点,以及如何做到吗?


1
您只需按照模拟单个类中的方法的方式进行操作即可。你困在哪里?
artbristol'4

使用powermock时,需要将此注释添加到测试类@PrepareForTest(ClassThatContainsStaticMethod.class)。但是我们不能指定多个注释。那怎么办呢?
新手2012年

Answers:


256

只需@PrepareForTest({Class1.class,Class2.class})为多个班级做。


11
大括号!那就是我所缺少的。
sudocoder 2014年

2
同样不要忘记@RunWith(PowerMockRunner.class)在课堂上切换到PowerMockRunner
Nikita Barishok

1
@NikitaBarishok并非总是需要。您可以定义一条规则来完成上述工作@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur

5
在科特林@PrepareForTest(Class1::class, Class2::class))
Ryan

最好使用@PrepareOnlyThisForTest代替@PrepareForTest。后者还修改了超类,这通常是不需要的。
www.Decompiler.com

12
@Test
 @PrepareForTest({Class1.class, Class2.class})
 public final void handleScript() throws Exception {
    PowerMockito.mockStatic(Class1.class);
    PowerMockito.mockStatic(Class2.class);

等等...


至于在方法级别PowerMock 1.6.5使用的问题@PrepareForTest(仅对我而言适用于类级别)
Nikita Barishok

2

在具有powermock / junit的Java中,根据需要 使用@PrepareForTest({})与数组({})一样多的静态类。

@RunWith(PowerMockRunner.class)
@PrepareForTest({XmlConverterA.class, XmlConverterB.class})
class TransfersServiceExceptionSpec {

}

在scala / junit中使用了powermock,因为scalatest没有与powermock集成。

@RunWith(classOf[PowerMockRunner])
@PrepareForTest(Array(classOf[XmlConverterA], classOf[XmlConverterB]))
class TransfersServiceExceptionSpec {

  @Test
  def test() {
  }
}

1

如果您使用的是kotlin,则语法为

@PrepareForTest(ClassA::class, ClassB::class)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.