Имитация статических методов из нескольких классов с помощью PowerMock


104

Я знаю, как имитировать статические методы из класса с помощью PowerMock.
Но я хочу имитировать статические методы из нескольких классов в тестовом классе с помощью JUnit и PowerMock.

Может ли кто-нибудь сказать мне, можно ли это сделать и как это сделать?


1
Вы просто делаете это так же, как имитируете методы из отдельных классов. Где ты застрял?
artbristol

При использовании powermock вам необходимо добавить эту аннотацию в тестовый класс @PrepareForTest (ClassThatContainsStaticMethod.class). Но мы не можем указать несколько аннотаций. Итак, как это сделать?
Новичок

Ответы:


259

Просто сделайте @PrepareForTest({Class1.class,Class2.class})для нескольких классов.


11
Фигурные скобки! вот чего мне не хватало.
Sudocoder

2
Также не забудьте перейти на PowerMockRunner @RunWith(PowerMockRunner.class)на уровне класса
Никита Баришок

1
@NikitaBarishok нужен не всегда. Вместо этого вы можете определить правило, чтобы все вышеперечисленное работало -@Rule public PowerMockRule rule = new PowerMockRule();
Аникет Такур

5
в Котлине@PrepareForTest(Class1::class, Class2::class))
Рыхан

Также лучше использовать @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на уровне метода (у меня работает только на уровне класса)
Никита Баришок

2

В java с powermock / junit используйте @PrepareForTest({})столько статических классов, сколько хотите, как array ( {}).

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

}

Я использовал powermock в scala / junit, так как у scalatest нет интеграции с powermock.

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

  @Test
  def test() {
  }
}

1

Если вы используете kotlin, синтаксис следующий

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.