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

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

Versions:

powermock 1.4.12 mockito 1.9.0 junit 4.8.2

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

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

TestAnnotation.java // this is the metadata annotation class for the 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 unitest MockA.java , if I do not use RunWith(PowerMockRunner.class) , I will get thisVersion printed 0.1 , as expected. But after adding RunWith(PowerMockRunner.class) , thisVersion turns into null . I suspect PowerMockRunner is doing some fun thing with package annotation here, does anyone have an idea? see the mini version of my code below:

+7
source share
1 answer

Based on @Alban's comments in the comments, it seems that adding this annotation to your test case should work around the problem:

 @PowerMockIgnore("com.smin.dummy.TestAnnotation") 
+4
source

All Articles