RunWith (PowerMockRunner.class) не работает с аннотацией пакета

Я пытаюсь иметь RunWith (PowerMockRunner.класс) Работа с существующей упаковке аннотации.

варианты:

powermock 1.4.12 mockito 1.9.0 junit 4.8.2

пакета-инфо.java / / это для аннотации пакета

@TestAnnotation(version="1.0")
package com.smin.dummy;

TestAnnotation.java / / это класс аннотаций метаданных для пакета "com.смин.манекен"

package com.smin.dummy;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
public @interface TestAnnotation {
  String version();
}

A.java

package com.smin.dummy;

public class A {
    private static Package myPackage;
    private static TestAnnotation version;

    static {
      myPackage = TestAnnotation.class.getPackage();
      version = myPackage.getAnnotation(TestAnnotation.class);
     }

    public static String getVersion() {
        return version.version();
    }
}

Моцка.java

package com.smin.dummy;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import com.smin.dummy.A;

@RunWith(PowerMockRunner.class) //comment out this line to see the difference
@PrepareForTest(A.class)
public class MockA {
@Test
public void test_mocked() throws Throwable {
    String thisVersion = A.getVersion();
    System.out.println(thisVersion);
}
}

в unitest Моцка.java, если я не использую RunWith(PowerMockRunner.class), я получу thisVersion напечатано 0.1 как и ожидалось. Но после добавления RunWith(PowerMockRunner.class), thisVersion превращается в null. Я подозреваю, что PowerMockRunner делает какую-то забавную вещь с аннотацией пакета здесь, кто-нибудь знает? см. мини-версию моего кода ниже:

1 ответов


основываясь на отслеживании @Alban в комментариях, похоже, что добавление этой аннотации в ваш тестовый случай должно обойти проблему:

@PowerMockIgnore("com.smin.dummy.TestAnnotation")