RunWith(PowerMockRunner.class) does not work with package annotation

自古美人都是妖i 提交于 2019-12-22 04:38:18

问题


I am trying to have RunWith(PowerMockRunner.class) working with my existing package annotation.

Versions:

powermock 1.4.12 mockito 1.9.0 junit 4.8.2

package-info.java // this is for the package annotation

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

TestAnnotation.java // this is the the metadata annotation class for package "com.smin.dummy"

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();
    }
}

MockA.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);
}
}

In the unitest MockA.java, if I don't use RunWith(PowerMockRunner.class), I will get the thisVersion printed 0.1 as expected. But after adding RunWith(PowerMockRunner.class), thisVersion turns into null. I suspect PowerMockRunner is doing some funny thing with the package annotation here, anybody has any idea? see the mini version of my code below:


回答1:


Building on @Alban's sleuthing in the comments, it looks like adding this annotation to your test case should circumvent the problem:

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


来源:https://stackoverflow.com/questions/13377634/runwithpowermockrunner-class-does-not-work-with-package-annotation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!